<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

    主站蜘蛛池模板: 亚洲欧洲日产国码在线观看| 最新亚洲人成网站在线观看 | 久久国产精品免费| 精品久久香蕉国产线看观看亚洲| 永久在线观看www免费视频| 亚洲AV无码一区二区三区电影| 亚洲综合国产精品第一页 | 国产成人A人亚洲精品无码| 久久久久久精品免费免费自慰| 亚洲爆乳精品无码一区二区| 国产精品亚洲片在线观看不卡| 无人在线观看免费高清视频| 一级午夜a毛片免费视频| 亚洲小视频在线观看| 国产在线19禁免费观看国产| 无码国产精品一区二区免费3p| 亚洲成a人无码亚洲成av无码| 亚洲国产日韩在线视频| 日韩精品无码人妻免费视频| 免费h视频在线观看| 免费看内射乌克兰女| 亚洲一级高清在线中文字幕| 亚洲色婷婷六月亚洲婷婷6月| 毛片在线免费视频| 久久免费公开视频| 黄色免费网址在线观看| 亚洲一级免费视频| 亚洲国产另类久久久精品小说| 四虎1515hm免费国产| 免费观看激色视频网站bd| 成年免费a级毛片免费看无码| 亚洲一区二区三区写真| 亚洲一区二区电影| 在线精品亚洲一区二区小说| 国产精品免费_区二区三区观看 | 亚洲国产精品嫩草影院在线观看 | 亚洲 自拍 另类小说综合图区| 4虎永免费最新永久免费地址| 人人揉揉香蕉大免费不卡| 一级特黄aaa大片免费看| 男人的天堂av亚洲一区2区|