【问题标题】:Primefaces SelectOneMenu: Selected item is not set in Managed BeanPrimefaces SelectOneMenu:托管 Bean 中未设置所选项目
【发布时间】: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 代码。
  • 我需要显示一个动态生成的角色列表,所以我不能使用&lt;f:selectItem&gt;,因为我不知道显示了多少个角色。
  • 尝试删除 immediate=true
  • 这张图片中的&lt;h:form/&gt;在哪里?这里最可能的罪魁祸首是转换/验证错误,当您使用submit() 提交整个表单时(这完全没有必要,您应该改用ajax),页面上的任何组件都可能阻止表单提交
  • @phoenix 是的,它可以在没有 immediate="true" 的情况下工作。非常感谢! @kolossus 这只是我页面的一部分。实际上页面中还有另一个数据表。在数据表和覆盖面板周围有&lt;h:form&gt;

标签: jsf primefaces selectonemenu


【解决方案1】:

总结 cmets,删除 immediate="true" 纠正了这种情况下的问题。但是,如果使用 jsf 2.0+,则使用 onchange="submit()" 应替换为 。在此处查看相关帖子:

h:selectOneMenu onchange="submit()" immediate="true" does not skip validation of other inputs

【讨论】:

    猜你喜欢
    • 2015-09-03
    • 2012-05-22
    • 2013-01-20
    • 2015-04-28
    • 2011-09-29
    • 2012-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多