2014-10-09 65 views
1

我的编辑页面不显示bean的值时,它是由一个JDBC搜索填充DataList控件调用,但工作得很好,如果列表不从JDBC搜索。编辑commandLink进入编辑页面,但不填充值到输入字段

的删除链接工作得很好,但编辑链接只是在田里没有填充值返回编辑页面。

我bean是一个ViewScoped豆。

DataList的显示页面:

<h:form rendered="#{not empty usersManagedBean.usersList}" id="form">        
<div class="table-responsive"> 
    &nbsp; 
    <h:dataTable value="#{usersManagedBean.userModel}" 
       var="showUser" 
       styleClass="table table-striped table-bordered table-hover"> 
     <h:column> 
      <f:facet name="header"> 
       Username 
      </f:facet> 
      <h:outputText value="#{showUser.username}"/> 
     </h:column> 
     <h:column> 
      <f:facet name="header"> 
       First Name 
      </f:facet>           
      <h:outputText value="#{showUser.firstname}"/> 
     </h:column> 
     <h:column> 
      <f:facet name="header"> 
       Last Name 
      </f:facet>           
      <h:outputText value="#{showUser.lastname}"/> 
     </h:column> 
     <h:column> 
      <f:facet name="header"> 
       Security Level 
      </f:facet>           
      <h:outputText value="#{showUser.groupname}"/> 
     </h:column> 
     <h:column rendered="false"> 
      <f:facet name="header"> 
       Security Level 
      </f:facet>           
      <h:outputText value="#{showUser.id}"/> 
     </h:column>            
     <h:column> 
      <h:commandLink value="Edit" 
          action="#{usersManagedBean.updateUser()}"> 
      </h:commandLink> 
      || 
      <h:commandLink value="Delete" 
          onclick="if (!confirm('Are you sure, you want to delete #{showUser.username}?')) { 
         return false; 
        } 
        ; 
        return true; 
        " action="#{usersManagedBean.deleteUser(showUser)}"> 
      </h:commandLink> 
     </h:column> 
    </h:dataTable>       
     <h:link outcome="AddUser.xhtml" value="Add New User"/> 
</div> 

编辑页面:

        <h:form> 
            <div class="form-group"> 
             <label>First Name:</label> 
             <h:inputText id="firstname" styleClass="form-control" value="#{usersManagedBean.user.firstname}"></h:inputText> 
             <label>Last Name:</label> 
             <h:inputText id="lastname" styleClass="form-control" value="#{usersManagedBean.user.lastname}"></h:inputText> 
             <label>Username:</label> 
             <h:inputText id="username" styleClass="form-control" value="#{usersManagedBean.user.username}"></h:inputText> 
            <div class="form-group"> 
             <label>Security Level:</label> 
             <h:selectOneMenu id="roleSelect" value="#{usersManagedBean.user.groupname}" styleClass="form-control"> 
              <f:selectItem itemLabel="----" itemValue="----"/> 
              <f:selectItem itemLabel="Administator" itemValue="admin"/> 
              <f:selectItem itemLabel="User" itemValue="user"/>                             
             </h:selectOneMenu> 
            </div> 
             <label>Password:</label>            
             <h:inputSecret id="password" styleClass="form-control" value="#{usersManagedBean.user.password}" required="true" requiredMessage="Enter Password"/> 
             <h:message for="password" style="color:red"/> 
             <label>Confirm Password:</label> 
             <h:inputSecret id="password2" styleClass="form-control" required="true" requiredMessage="Re-enter Password"/> 
             <h:message for="password2" style="color:red" /> 
             <o:validateEqual components="password password2" message="Passwords don't match" showMessageFor="password2"/> 

            </div> 
            <h:commandButton value="Update" type="submit" styleClass="btn btn-default" action="#{usersManagedBean.saveUser()}"></h:commandButton> 
            || 
            <h:commandButton value="Cancel" onclick="history.back(-1);return false" styleClass="btn btn-default"></h:commandButton> 

           </h:form> 

调用编辑页面的方法:

public String updateUser(){ 

    user = userModel.getRowData(); 
    return "EditUser.xhtml"; 
} 

没有异常抛出在所有。

回答

0

如果使用@ViewScoped豆,当您从列表页转到页编辑JSF将创建一个新的实例。你有3个替代方案我可以想到:

  • 使用@SessionScoped
  • 通过ajax和弹出面板打开编辑页面。
  • 使用@ViewScoped,用户ID添加到URL作为视图参数(即EditUser.xhtml?ID = 123)从分贝在编辑页,而不是列表页,在页加载和加载用户数据。在这种情况下,最好为列表和编辑页面提供不同的托管bean。
+0

我如何可以去选择2/3,请进一步说明?只是大约3个星期新的jsf @tt_emrah – ollaollu 2014-10-10 20:19:11

+0

经过这么多的进步性错误和不断的搜索之后,我疯狂的理解了真实当我离开时,JSF创建新实例的原因。这个http://stackoverflow.com/questions/8459903/correct-usage-of-session-scope-in​​-two-page-master-detail-user-interface/8464636#8464636帮助我成功地解决了它。感谢BalusC以清晰的方式回答了这两个帖子,并感谢tt_emrah的回答。 – ollaollu 2014-10-23 03:12:59

+0

我没有机会详细解释它,对此感到遗憾。我希望至少我指出你正确的方向。谢谢... – 2014-10-23 06:01:21