1

両方の Bean で ViewScope を使用すると、commandLink を介して f:param を使用して、1 つの Bean (browseUsers) から別の Bean に値を渡しますが、bean 2 (editUsers) では、コンストラクターでコマンド ボタンが押されると、すべての値が失われます。お知らせ下さい。

browseUsers.xhtml のコマンドリンクとデータテーブル コード:

<h:form id="form">  
    <p:dataTable id="dataTable" var="users" value="#{browseUsers.userList}" rowKey="#{users.firstName}" widgetVar="usersTable" paginator="true" paginatorAlwaysVisible="false" rows="10"  
            filteredValue="#{browseUsers.filteredUser}" emptyMessage="No users found with given criteria">

     <f:facet name="header">                  
        <p:outputPanel>  
            <h:outputText value="Search all fields" />                  
            <p:inputText id="globalFilter" onkeyup="usersTable.filter()" style="width:150px" />  
        </p:outputPanel>
     </f:facet>         
     <p:column  style="width:40px">                    
     <h:panelGrid columns="3" styleClass="actions" cellpadding="2">           
             <p:commandLink  action="#{browseUsers.editUser}"  title="View">
             <p:graphicImage styleClass="ui-icon ui-icon-pencil" style="display: inline-block;"/>               
             <h:outputText value="#{users.id}" />
               <f:param name="userId" value="#{users.id}" />                                
             </p:commandLink>
         </h:panelGrid>
        </p:column>     
     <p:column id="firstNameColumn" filterBy="#{users.firstName}" sortBy="#{users.firstName}" headerText="First Name" filterMatchMode="contains">
        <h:outputText value="#{users.firstName}" />
    </p:column>  

      <p:column id="lastNameColumn" filterBy="#{users.lastName}" sortBy="#{users.lastName}" headerText="Last Name" filterMatchMode="contains">
        <h:outputText value="#{users.lastName}" />  
    </p:column>

    <p:column id="userNameColumn" filterBy="#{users.userName}" sortBy="#{users.userName}" headerText="Username" filterMatchMode="contains">  
        <f:facet name="header">  
            <h:outputText value="Username" />  
        </f:facet>  
        <h:outputText value="#{users.userName}" />    
    </p:column>

    </p:dataTable>      

editUsers.xhtml のコマンド ボタン コードは次のとおりです。

  <h:form id="saveForm">                                          
       <p:panelGrid id="display" columns="2" cellpadding="4" tableStyle="width:auto">                      
           <h:outputText value="First Name:" />  
           <h:inputText value="#{editUsers.selectedUser.firstName}" id="firstName"/>

            <h:outputText value="Last Name:" />
           <h:inputText value="#{editUsers.selectedUser.lastName}" id="lastName"/>  

           <h:outputText value="Username:" />
           <h:inputText value="#{editUsers.selectedUser.userName}" id="userName"/>

           <h:outputText value="Password:" />
           <h:inputText value="#{editUsers.selectedUser.password}" id="password"/>

         <p:commandButton value="Reset" type="reset" /> 
      <p:commandButton value="Submit" actionListener="#{editUsers.saveUser}" action="#{editUsers.browseUser}" ajax="false" />

       </p:panelGrid>          
        </h:form>

editUsers.java の Bean メソッドは次のとおりです。

@ManagedBean(name = "editUsers")

@ViewScoped

public class editUsers は Serializable を実装します {

private List<User> userList; 

private User selectedUser;  


private Long userId;



public editUsers() 
{  

    AdminFacadeRemote afr = ContextUtil.contextLookup(AdminFacadeRemote.class, AdminFacade.class);

    setSelectedUser(new User());
}

@PostConstruct  
public void initialize()
{       

    String s = JSFContextUtil.getRequestParameter("userId");


    if (! StringUtils.isEmpty(s))           
    {
        userId = Long.parseLong(s);

        try {

            AdminFacadeRemote afr = ContextUtil.contextLookup(AdminFacadeRemote.class, AdminFacade.class);
            User u = afr.findUser(userId);
            setSelectedUser(u);
        }
        catch (Exception e){
            e.printStackTrace();
        }
    }
}
 public void saveUser(ActionEvent event)
{           

    AdminFacadeRemote afr = ContextUtil.contextLookup(AdminFacadeRemote.class, AdminFacade.class);

    afr.saveUsers(selectedUser);                      

}

public String browseUser()
{
    return "browseusers";
}
4

0 に答える 0