如何将selectcheckBoxMenu中的选定值传递给我的bean?

时间:2017-03-24 09:14:25

标签: jsf primefaces selectcheckboxmenu

我使用的是JSF 2.2.8和primefaces 6.0,我有一个selectCheckBoxMenu,我想在我的bean中检索所选的值。

selectCheckboxMenu是从数据库填充但是当我选择属性时我保存没有任何反应它不会调用保存功能

这是我的selectCheckBoxMenu

                          <p:outputLabel for="ressource" value="Ressource"/>
                        <h:panelGroup >         
                         <p:selectCheckboxMenu id="ressource" label="Ressource" value="#{affectationBean.selectedRessource}"  multiple="true">
                                <f:selectItems value="#{affectationBean.ressources}" var="r" itemLabel="#{r.nom}" itemValue="r.idt_ressource" />
                            </p:selectCheckboxMenu>
                         </h:panelGroup>
                        <p:commandButton icon="ui-icon-save"  actionListener="#{affectationBean.save}" value="Save" update="@affectation" ajax="false" style="display:inline-block;margin-top:5px"/>

这是selectedRessource和actionListener save

的声明
    private Long [] selectedRessource;
    // Getters setters and Construct


    public void save(){

    for(int i=0 ;i<selectedRessource.length;i++){
    system.out.println("id ===> " + selectedRessource[i]);
    } 

3 个答案:

答案 0 :(得分:1)

我的建议是: 首先确保所有内容都在h:form标签内。 不需要multiple = true,因为此标记不具有此属性  我测试了以下修改,并在我的bean中获得了选定的多个值。唯一的区别是我对itemLabel和itemValue使用相同的值,但在你的情况下它是对象。我也使用primefaces 6,甚至不需要将actionListner更改为action。它按原样运行。sample xhtml sample ResourceBean.java

                                  <p:outputLabel for="ressource" value="Ressource"/>
                    <h:panelGroup >         
                     <p:selectCheckboxMenu id="ressource" label="Ressource" value="#{resourceBean.selectedRessource}">
                            <f:selectItems value="#{resourceBean.ressources}" var="r" itemLabel="#{r}" itemValue="#{r}" />
                        </p:selectCheckboxMenu>
                     </h:panelGroup>
                    <p:commandButton icon="ui-icon-save"  actionListener="#{resourceBean.save}" value="Save" ajax="false" style="display:inline-block;margin-top:5px"/>

答案 1 :(得分:0)

问题在于您的p:commandButton,您有3个选项

更改方法:

public void save(ActionEvent actionEvent){...}

更改您的动作侦听器值:

actionListener="#{affectationBean.save()}"

或更改按钮以使用action

action="#{affectationBean.save}"

答案 2 :(得分:-1)

免责声明:这是一种解决方法。它不是永久解决方案,而是允许您使用selectCheckboxMenu并继续工作。

此组件存在一个问题,该问题阻止它在提交时将值传递到支持Bean。

由于某种原因,应包含选定值的数组在提交时被清除。因此,我做了一个未在标记中声明的额外数组,并在每个change事件上进行了更新。然后在提交时值仍然存在。见下文:

BackingBean.java

private String[] sCodes;
private String[] sCodes2; //extra array, not in form.xhtml

public void updateCodes()
    {       
        sCodes2 = sCodes; //keeps the values in the other array
    }

public void doSend() throws IOException
    {
log.trace("selected codes: {} selected codes2 length: {}", sCodes.length, sCodes2.length);
    }

form.xhtml

<p:selectCheckboxMenu id="codeCtl" value="#{bean.SCodes}" label="Codes" filter="true" filterMatchMode="startsWith" panelStyle="width:250px">
<f:selectItems value="#{bean.menuCodes}" />
<p:ajax event="change" listener="#{bean.updateCodes()}" />                                        
</p:selectCheckboxMenu>
<p:commandButton value="submit" actionListener="#{bean.doSend}" id="ctlSubmit" update="appform"/>