【问题标题】:Change component attribute from managedbean从 managedbean 更改组件属性
【发布时间】:2013-10-21 09:09:13
【问题描述】:

我正在尝试从 managedbean 更改 primefaces 组件的属性。我有一个组件 selectCheckboxMenu 实现如下:

<p:selectCheckboxMenu value="#{formBean.selectedMovies}" label="Movies" filter="true" filterText="Filter" filterMatchMode="startsWith" panelStyle="width:220px">  
    <f:selectItems value="#{formBean.movies}" />
    <p:ajax update="treeTableForm" listener="#{formBean.listenMovieChange}" />  
</p:selectCheckboxMenu>

我想在方法listenMovieChange 中从managedbean 更改此组件的属性标签。我怎样才能做到这一点?我尝试这种方法的原因是,我在一个页面中有很多 selectCheckboxMenu 组件。

【问题讨论】:

    标签: jsf primefaces


    【解决方案1】:

    您需要创建一个绑定组件列表才能在服务器端编辑它们。为了根据触发的 ajax 事件获得您必须选择的那个,只需将组件本身作为方法参数发送(假设您使用的是 EL 2.2):

    //You'll need to initialize them setting the proper values
    private List<SelectCheckBoxMenu> checkBoxes;
    
    //GETTER AND SETTER
    
    public void listenMovieChange(SelectCheckBoxMenu menuToProcess){
        menuToProcess.setLabel(newLabel());
    }
    
    <ui:repeat var="checkboxmenu" value="#{formBean.checkBoxes}">
    
        <p:selectCheckboxMenu
            filter="true" filterText="Filter" filterMatchMode="startsWith" 
            panelStyle="width:220px" binding="#{checkboxmenu}">  
            <f:selectItems value="#{formBean.movies}" />
            <p:ajax update="treeTableForm" listener="#{formBean.listenMovieChange(checkboxmenu)}" />  
        </p:selectCheckboxMenu>
    
    </ui:repeat>
    

    【讨论】:

    • 我可以这样做,但是如果我在同一个页面中有很多这些组件,我该怎么办,用户可以增加这些组件的数量。
    • 那么你不会只对标签本身有问题,而是对整个组件有问题。然后您应该创建一个绑定SelectCheckBoxMenu 的列表。看看我的编辑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-06
    • 2011-04-18
    • 2015-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多