<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    大魚

    JSF中commandLink與dataTable搭配不能正常工作的解決辦法

    1.     環(huán)境

    Myfaces1.4 + tomahawk-1.1.3 + tomcat5.x + JDK5

    下載:http://myfaces.apache.org

    2.     問題描述

    假設(shè)場景,首先顯示用戶列表(用dataTable來實現(xiàn)列表顯示),然后可以點擊用戶的名字導(dǎo)航到用戶詳細(xì)信息頁面。

    3.     嘗試實現(xiàn)以及出現(xiàn)的問題

    UserInfo.java

    package com.wide.jsf.model;

     

    /**

     * 用戶信息

     *

     * @author cydooo

     *

     */

    public class UserInfo {

        private Long userId;

        private String username;

        private String userdesc;

        public UserInfo() {

        }

        public UserInfo(Long userId, String username) {

            this.userId = userId;

            this.username = username;

        }

        public UserInfo(Long userId, String username, String userdesc) {

            this(userId, username);

            this.userdesc = userdesc;

        }

        //省略getter和setter

    }
     


    UserInfoAction.java

    package com.wide.jsf.web;

     

    import java.util.Arrays;

    import java.util.List;

     

    import javax.faces.context.FacesContext;

     

    import com.wide.jsf.model.UserInfo;

     

    public class UserInfoAction {

     

        /*

         * 用于顯示詳細(xì)信息

         */

        private UserInfo userInfo;

     

        /*

         * 用于顯示用戶列表

         */

        private List<UserInfo> userInfos;

     

        public UserInfo getUserInfo() {

           return userInfo;

        }

     

        public void setUserInfo(UserInfo userInfo) {

           this.userInfo = userInfo;

        }

     

        public List<UserInfo> getUserInfos() {

           return userInfos;

        }

     

        public void setUserInfos(List<UserInfo> userInfos) {

           this.userInfos = userInfos;

        }

     

        public String listUser() {

           userInfos = Arrays.asList(new UserInfo[] { new UserInfo(1L, "Tom"),new UserInfo(2L, "John"), new UserInfo(3L, "Lily") });

             return "listUser";

        }

     

        public String showDetail() {

           FacesContext context = FacesContext.getCurrentInstance();

           Long userId = Long.parseLong((String) context.getExternalContext()

                  .getRequestParameterMap().get("userId"));

           System.out.println("==>" + userId);

           switch (userId.intValue()) {

           case 1:

               userInfo = new UserInfo(1L, "Tom", "I am Tom");

               break;

           case 2:

               userInfo = new UserInfo(2L, "John", "I am John");

               break;

           case 3:

               userInfo = new UserInfo(3L, "Lily", "I am Lily");

           }

           return "userdetail";

        }

    }
     


    Backingbean和navigation的配置

    <managed-bean>

           <managed-bean-name>userInfoAction</managed-bean-name>

           <managed-bean-class>

               com.wide.jsf.web.UserInfoAction

           </managed-bean-class>

           <managed-bean-scope>request</managed-bean-scope>

        </managed-bean>

        <navigation-rule>

           <from-view-id>/listUser.jsp</from-view-id>

           <navigation-case>

               <from-outcome>userdetail</from-outcome>

               <to-view-id>/userdetail.jsp</to-view-id>

           </navigation-case>

        </navigation-rule>

        <navigation-rule>

           <from-view-id>/userdetail.jsp</from-view-id>

        </navigation-rule>
     


    Jsp頁面內(nèi)容

    A. listUser.jsp

    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>

    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>

    <%@ page contentType="text/html; UTF-8" pageEncoding="UTF-8"%>

     

    <f:view>

    <html>

      <head>

        <title>userlist</title>

      </head>

     

      <body>

        <h:form>

           <h:dataTable var="user" value="#{userInfoAction.userInfos}">

               <h:column>

                  <h:commandLink value="#{user.username}" action="#{userInfoAction.showDetail}">

                      <f:param value="#{user.userId}" name="userId"/>

                  </h:commandLink>

               </h:column>

           </h:dataTable>

        </h:form>

      </body>

    </html>

    </f:view>
     


    B. userdetail.jsp

    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>

    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>

    <%@ page contentType="text/html; UTF-8" pageEncoding="UTF-8"%>

     

    <f:view>

    <html>

      <head>

        <title>userDetail</title>

      </head>

     

      <body>

        <h:form>

        <h:outputText value="#{userInfoAction.userInfo.userdesc}"/>

        </h:form>

      </body>

    </html>

    </f:view>
     


    編碼結(jié)束,啟動tomcat測試,進入userlist頁面之后,我們可以看到用戶列表,但點擊用戶查看詳細(xì)信息的時候,發(fā)現(xiàn)并沒有調(diào)用showDetail方法。

    4.     解決辦法

    A.                        將<managed-bean-scope>request</managed-bean-scope>改為<managed-bean-scope>session</managed-bean-scope>。這是最簡單的做法,改了之后重起Tomcat之后馬上就看到效果了。但是很明顯的使用session scope不好,比如這個例子,用戶列表在當(dāng)前seesion有效的情況下將一直保留,多窗口瀏覽器中也容易發(fā)生意想不到的問題。沒有必要不要用session。

    B.                        將用戶列表綁定到dataTable控件。

    首先修改UserInfo類,讓他實現(xiàn)Serializable接口,其他代碼完全一樣,實現(xiàn)Serializable接口是必須的,否則會拋出java.io.NotSerializableException異常。

    public class UserInfo implements Serializable{…}
     


    UserInfoAction.java的修改

    package com.wide.jsf.web;

     

    import java.util.Arrays;

    import java.util.List;

     

    import javax.faces.component.html.HtmlDataTable;

    import javax.faces.context.FacesContext;

     

    import com.wide.jsf.model.UserInfo;

     

    public class UserInfoAction {

     

        /*

         * 用于顯示詳細(xì)信息

         */

        private UserInfo userInfo;

     

        /*

         * 綁定用戶列表

         */

        private HtmlDataTable dataTable = new HtmlDataTable();

       

        public UserInfo getUserInfo() {

           return userInfo;

        }

     

        public void setUserInfo(UserInfo userInfo) {

           this.userInfo = userInfo;

        }

     

        public String listUser() {

           List<UserInfo> userInfos = Arrays.asList(new UserInfo[] { new UserInfo(1L, "Tom"),

                  new UserInfo(2L, "John"), new UserInfo(3L, "Lily") });

           dataTable.setValue(userInfos);

           return "listUser";

        }

     

        public String showDetail() {

           FacesContext context = FacesContext.getCurrentInstance();

           Long userId = Long.parseLong((String) context.getExternalContext()

                  .getRequestParameterMap().get("userId"));

           System.out.println("==>" + userId);

           switch (userId.intValue()) {

           case 1:

               userInfo = new UserInfo(1L, "Tom", "I am Tom");

               break;

           case 2:

               userInfo = new UserInfo(2L, "John", "I am John");

               break;

           case 3:

               userInfo = new UserInfo(3L, "Lily", "I am Lily");

           }

           return "userdetail";

        }

     

        public HtmlDataTable getDataTable() {

           return dataTable;

        }

     

        public void setDataTable(HtmlDataTable dataTable) {

           this.dataTable = dataTable;

        }

    }
     


    listUser.jsp的修改

    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>

    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>

    <%@ page contentType="text/html; UTF-8" pageEncoding="UTF-8"%>

     

    <f:view>

    <html>

      <head>

        <title>userlist</title>

      </head>

     

      <body>

        <h:form>

           <h:dataTable var="user" binding="#{userInfoAction.dataTable}">

               <h:column>

                  <h:commandLink value="#{user.username}" action="#{userInfoAction.showDetail}">

                      <f:param value="#{user.userId}" name="userId"/>

                  </h:commandLink>

               </h:column>

           </h:dataTable>

        </h:form>

      </body>

    </html>

    </f:view>
     


    重起Tomcat一切OK,不需要非得在session scope下了。

     

    本文來自CSDN博客,轉(zhuǎn)載請標(biāo)明出處:http://blog.csdn.net/pengrg166/archive/2007/01/22/1490174.aspx

    posted on 2009-10-15 14:28 大魚 閱讀(601) 評論(0)  編輯  收藏 所屬分類: JSF

    主站蜘蛛池模板: 国色精品卡一卡2卡3卡4卡免费| 成全动漫视频在线观看免费高清版下载 | 最新国产乱人伦偷精品免费网站| 免费成人在线观看| 精品亚洲国产成人av| 日本免费人成黄页网观看视频| 亚洲av无码无线在线观看| 国产在线观看www鲁啊鲁免费| 亚洲精品乱码久久久久蜜桃| 日本高清免费网站| 亚洲AV色无码乱码在线观看 | 亚洲天堂中文字幕在线| 久久高潮一级毛片免费| 亚洲成色www久久网站夜月| a级毛片在线免费看| 青青草原精品国产亚洲av| 久久青草免费91观看| 亚洲冬月枫中文字幕在线看| 成人免费男女视频网站慢动作| 亚洲国产成人久久综合| 亚洲精品人成无码中文毛片| 中国性猛交xxxxx免费看| 亚洲电影中文字幕| 欧美日韩国产免费一区二区三区| 亚洲6080yy久久无码产自国产| 亚洲精品国产高清不卡在线| 香港a毛片免费观看| 亚洲人AV在线无码影院观看| 免费一级特黄特色大片在线| a色毛片免费视频| 亚洲国产精品综合久久久| 国产免费看插插插视频| 91免费福利视频| 亚洲国产中文在线二区三区免 | 亚洲无码黄色网址| 日韩电影免费在线观看| 2017亚洲男人天堂一| 亚洲午夜福利精品无码| 2019中文字幕在线电影免费| 国产精品亚洲色图| 亚洲国产精品久久久久婷婷老年|