2013-06-28 43 views
0

我在使用素数面获取表格字段下的行选择值时出现问题。 要求是,当我选择行时,相关数据和相关信息必须显示在同一页面上,就像我只想在表格下显示特定用户的性别和地址一样。没有获得使用素数面选择行的价值

我使用JSF 2.0和总理面临3.5

这里是我的代码,请检查一下我哪里有误

package com.poc.faces; 
all imports 
............. 
.............. 
@ManagedBean 
@SessionScoped 
public class UserManagedBean implements Serializable { 
    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 
    public static List<User> list = new ArrayList<User>(); 

    static { 
     list.add(new User(3, "ankurjadiya", "[email protected]", 
       "88849113", new Date(), "M", "sare ga ma pa")); 

     list.add(new User(1, "Administrator", "[email protected]", "9000510456", 
       new Date(), "M", "Hyderabad")); 

     list.add(new User(2, "Guest", "[email protected]", "9247469543", 
       new Date(), "M", "Hyderabad")); 

     list.add(new User(3, "John", "[email protected]", "9000510456", 
       new Date(), "M", "Hyderabad")); 

     list.add(new User(4, "Paul", "[email protected]", "9247469543", 
       new Date(), "M", "Hyderabad")); 

     list.add(new User(5, "raju", "[email protected]", "9000510456", 
       new Date(), "M", "Hyderabad")); 


    } 

    private String username; 
    private String password; 
    private String searchUser; 
    private User selectedUser; 
    private UserDataModel dataModel; 

    public UserManagedBean() { 
     this.dataModel = new UserDataModel(list); 
    } 

    setter and getter of fields 
     .............. 
     ............... 

    public String login() { 

     if ("ankur".equalsIgnoreCase(getUsername()) 
       && "ankur".equals(getPassword())) { 
      return "home"; 
     } else { 

      FacesContext context = FacesContext.getCurrentInstance(); 

      context.addMessage("username", new FacesMessage(
        "Invalid UserName and Password")); 

      return "login"; 

     } 
    } 

用户数据模型类

public class UserDataModel extends ListDataModel<User> implements Serializable, 
     SelectableDataModel<User> { 
    public UserDataModel() { 

    } 

    public UserDataModel(List<User> users) { 
     super(users); 
    } 

    public User getRowData(String username) { 
     List<User> list = (List<User>) getWrappedData(); 
     for (User user : list) { 
      if (user.getUsername().equals(username)) 
       return user; 
     } 
     return null; 
    } 

    public Object getRowKey(User user) { 
     // TODO Auto-generated method stub 
     return user.getUsername(); 
    } 
} 


     public void onRowSelect(SelectEvent event) { 
      FacesMessage msg = new FacesMessage("User Selected", 
        ((User) event.getObject()).getUsername()); 

      FacesContext.getCurrentInstance().addMessage(null, msg); 
     } 

     public void onRowUnselect(UnselectEvent event) { 
      FacesMessage msg = new FacesMessage("User Unselected", 
        ((User) event.getObject()).getUsername()); 

      FacesContext.getCurrentInstance().addMessage(null, msg); 
     } 
    } 

这就是家。 xtml我检索的值

<html xmlns="http://www.w3c.org/1999/xhtml" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:p="http://primefaces.org/ui" 
    xmlns:ui="http://java.sun.com/jsf/facelets"> 

<h:head> 
    <link href="../css/style.css" type="text/css" rel="stylesheet" /> 
</h:head> 
<h:body> 
    <h:form prependId="false" id="form"> 
     <p:layout style="min-width:400px;min-height:200px;" id="layout" 
      fullPage="true"> 

      <p:layoutUnit position="west" header="Menu" collapsible="true"> 
       <p:menu> 
        <p:submenu label="Resources"> 
         <p:menuitem value="Option1" 
          action="#{userManagedBean.getSearchUsersResults()}" 
          update="left_column" /> 

        </p:submenu> 
       </p:menu> 
      </p:layoutUnit> 

      <p:layoutUnit position="center"> 
       <p:panel id="left_column" 
        style="width: 2px; left: 2px; margin-left: 2px"> 
        <center> 
         <H1>UserData</H1> 
         <br /> 
         <p:dataTable value="#{userManagedBean.dataModel}" var="user" 
          pagination="true" rows="5" selection="#{userManagedBean.selectedUser}" selectionMode="single" > 



          <p:column> 
           <f:facet name="header">UserId</f:facet> 
           <h:outputText value="#{user.userId}"></h:outputText> 
          </p:column> 
          <p:column> 
           <f:facet name="header">Username</f:facet> 
           <h:outputText value="#{user.username}"></h:outputText> 
          </p:column> 
          <p:column> 
           <f:facet name="header">EmailId</f:facet> 
           <h:outputText value=" #{user.emailId}"></h:outputText> 
          </p:column> 
          <p:column> 
           <f:facet name="header">Phone</f:facet> 
           <h:outputText value="#{user.phone}"></h:outputText> 
          </p:column> 
         </p:dataTable> 
        </center> 
       </p:panel> 
       <h:panelGrid id="display" columns="2" cellpadding="4"> 
        <h:outputText value="Gender:" /> 
        <h:inputText value="#{userManagedBean.selectedUser.gender}" /> 

        <h:outputText value="Address:" /> 
        <h:inputText value="#{userManagedBean.selectedUser.address}" /> 

       </h:panelGrid> 
`   </p:layoutUnit> 
      <p:layoutUnit position="south" footer="bottom"> 

      </p:layoutUnit> 
     </p:layout> 

    </h:form> 
</h:body> 


</html> 

回答

0

您需要设置<p:dataTable/>上的rowKey属性以正确启用行选择。 rowKey属性应该设置为数据表中实体的唯一标识符,如主键属性。从你的样品看,它看起来像这样:

<p:dataTable value="#{userManagedBean.dataModel}" rowKey="#{user.userId}" var="user" pagination="true" rows="5" selection="#{userManagedBean.selectedUser}" selectionMode="single">