Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf Edit commandLink转到编辑页面,但不将值填充到输入字段中_Jsf_Jsf 2 - Fatal编程技术网

Jsf Edit commandLink转到编辑页面,但不将值填充到输入字段中

Jsf Edit commandLink转到编辑页面,但不将值填充到输入字段中,jsf,jsf-2,Jsf,Jsf 2,当从由JDBC搜索填充的数据列表调用我的编辑页面时,它不会显示bean值,但如果列表不是来自JDBC搜索,它就可以正常工作 “删除”链接工作正常,但“编辑”链接只返回编辑页面,字段中没有填充值 我的bean是一个可视范围的bean 数据列表显示页面: <h:form rendered="#{not empty usersManagedBean.usersList}" id="form"> <div class="table

当从由JDBC搜索填充的数据列表调用我的编辑页面时,它不会显示bean值,但如果列表不是来自JDBC搜索,它就可以正常工作

“删除”链接工作正常,但“编辑”链接只返回编辑页面,字段中没有填充值

我的bean是一个可视范围的bean

数据列表显示页面:

<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>

不会引发任何异常。

如果您使用
@ViewScoped
bean,当您从列表页面导航到编辑页面时,jsf将创建一个新的实例。我可以想出3个备选方案:

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

请进一步解释如何使用选项2/3?jsf@tt_emrah刚开始3周,在经历了如此多的渐进性错误和持续的搜索之后,这让我明白了为什么jsf会在我离开时创建一个新实例的真正原因。这帮助我成功地解决了这个问题。感谢BalusC以清晰的方式回答了这两篇文章,并感谢tt_emrah的回答。我无法有机会详细解释,对此表示抱歉。我希望至少我给你指明了正确的方向。谢谢
                                    <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";
}