【发布时间】:2014-02-27 18:18:16
【问题描述】:
我正在overlayPanel 中编写SelectOneMenu。问题是 bean 中选择的值始终为空。未调用 setter 方法,因此我认为选择项目时未提交 SelectOneMenu。
这是我的页面:
<p:overlayPanel id="OverLayPanelNewRole" for="buttonAddRole">
<p:selectOneMenu id="SelectOneMenuRoles" value="#{userSettingBean.selectedRole}"
onchange="submit()" immediate="true">
<f:selectItems value="#{userSettingBean.roleList}" var="role" itemLabel="#{role.NAME}" style="width:100%"/>
</p:selectOneMenu>
</p:overlayPanel>
我的托管 Bean:
@ManagedBean(name = "userSettingBean")
@SessionScoped
public class UserSettingBean implements Serializable {
private static final long serialVersionUID = -7579402702068562565L;
@ManagedProperty(value= "#{roleServiceImpl}")
private RoleService roleService;
private List<Role> roleList;
private Role selectedRole;
@PostConstruct
public void init(){
//init Roles for selection in overlayPanel
roleList=roleService.findAllRole();
}
public RoleService getRoleService() {
return roleService;
}
public void setRoleService(RoleService roleService) {
this.roleService = roleService;
}
public List<Role> getRoleList() {
return roleList;
}
public void setRoleList(List<Role> roleList) {
this.roleList = roleList;
}
public Role getSelectedRole() {
return selectedRole;
}
public void setSelectedRole(Role selectedRole) {
this.selectedRole = selectedRole;
}
谁能帮我解决这个问题?
【问题讨论】:
-
先发布你的托管 bean 代码。
-
我需要显示一个动态生成的角色列表,所以我不能使用
<f:selectItem>,因为我不知道显示了多少个角色。 -
尝试删除 immediate=true
-
这张图片中的
<h:form/>在哪里?这里最可能的罪魁祸首是转换/验证错误,当您使用submit()提交整个表单时(这完全没有必要,您应该改用ajax),页面上的任何组件都可能阻止表单提交 -
@phoenix 是的,它可以在没有 immediate="true" 的情况下工作。非常感谢! @kolossus 这只是我页面的一部分。实际上页面中还有另一个数据表。在数据表和覆盖面板周围有
<h:form>。
标签: jsf primefaces selectonemenu