Jsf Edit commandLink转到编辑页面,但不将值填充到输入字段中
当从由JDBC搜索填充的数据列表调用我的编辑页面时,它不会显示bean值,但如果列表不是来自JDBC搜索,它就可以正常工作 “删除”链接工作正常,但“编辑”链接只返回编辑页面,字段中没有填充值 我的bean是一个可视范围的bean 数据列表显示页面: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
<h:form rendered="#{not empty usersManagedBean.usersList}" id="form">
<div class="table-responsive">
<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打开编辑页面,并作为弹出面板打开
- 使用
,将用户id作为视图参数添加到url中(即EditUser.xhtml?id=123),并在页面加载时从编辑页面(而不是列表页面)中的数据库加载用户数据。在这种情况下,最好为列表和编辑页面使用不同的托管bean@ViewScoped
<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";
}