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

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

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

    大魚

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

    1.     環境

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

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

    2.     問題描述

    假設場景,首先顯示用戶列表(用dataTable來實現列表顯示),然后可以點擊用戶的名字導航到用戶詳細信息頁面。

    3.     嘗試實現以及出現的問題

    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 {

     

        /*

         * 用于顯示詳細信息

         */

        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頁面內容

    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>
     


    編碼結束,啟動tomcat測試,進入userlist頁面之后,我們可以看到用戶列表,但點擊用戶查看詳細信息的時候,發現并沒有調用showDetail方法。

    4.     解決辦法

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

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

    首先修改UserInfo類,讓他實現Serializable接口,其他代碼完全一樣,實現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 {

     

        /*

         * 用于顯示詳細信息

         */

        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博客,轉載請標明出處:http://blog.csdn.net/pengrg166/archive/2007/01/22/1490174.aspx

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

    主站蜘蛛池模板: a毛片全部播放免费视频完整18| 亚洲综合无码无在线观看 | 91精品导航在线网址免费| 大地影院MV在线观看视频免费 | 亚洲AV无码资源在线观看| 美女黄色毛片免费看| a级成人毛片免费图片| 亚洲精品二区国产综合野狼 | 亚洲国产精品一区二区九九| 亚洲精品无码久久久久去q| 中文在线观看免费网站| 麻豆国产精品入口免费观看| MM131亚洲国产美女久久| 亚洲毛片在线免费观看| 精品免费AV一区二区三区| 中文字幕在线免费| 亚洲免费在线视频观看| 一级特黄色毛片免费看| 成年人网站免费视频| 亚洲精品无码av天堂| 亚洲中文字幕无码mv| 四虎影在线永久免费四虎地址8848aa| 亚洲Av永久无码精品三区在线 | 国产精品亚洲专区一区| 久久综合亚洲色HEZYO国产| 亚洲中字慕日产2021| a级毛片免费全部播放| 亚洲精品免费在线| 四虎影视永久免费视频观看| 亚洲黄片手机免费观看| 国产免费啪嗒啪嗒视频看看| 久久成人永久免费播放| 亚洲精品一级无码鲁丝片| 99热这里只有精品免费播放| 亚洲乱码精品久久久久..| 亚洲国产精品免费在线观看| 在线精品免费视频| 亚洲一级片在线观看| 免费一级毛片免费播放| 亚洲jizzjizz少妇| 在线a毛片免费视频观看|