使用Primefaces更新JSF组件

时间:2016-05-29 05:43:33

标签: jsf jsf-2 primefaces

我知道这已被问过很多次,但主要是用ajax。我不能在我的项目中使用ajax。

我想在selectOneMenu A上创建一个事件并更新selectOneMenu B.

<p:selectOneMenu id="A" binding="#{bean.slmA}" >
    <f:selectItems value="#{bean.itemsA}"/>
</p:selectOneMenu>

<p:selectOneMenu id="B" binding="#{bean.slmB}">
    <f:selectItems value="#{bean.itemsB}"/>
</p:selectOneMenu>

我已经在valueChangeListener中使用了一个向itemsB添加元素的方法(也是onchange =&#34; submit()&#34;)但是slmB没有更新。

在向itemsB列表中添加元素后是否应该更新?

1 个答案:

答案 0 :(得分:0)

如果没有ajax,我猜一个选项就是使用隐藏的commandButton来完成一个完整的请求(我猜其他选项也是如此):

<h:form id="form">
    <p:selectOneMenu id="A" value="#{bean.slmA}" onchange="$('#form\\:cb').click()">
        <f:selectItems value="#{bean.itemsA}"/>
    </p:selectOneMenu>

    <p:selectOneMenu id="B" value="#{bean.slmB}">
        <f:selectItems value="#{bean.itemsB}"/>
    </p:selectOneMenu>

    <p:commandButton id="cb" ajax="false" style="display: none" value="button" action="#{bean.functionThatFillInformationOfListB()}" />
</h:form>

Bean必须至少为@ViewScopedfunctionThatFillInformationOfListB()返回void或null。请注意,我已将binding更改为value中的selectOneMenu,但如果您实际上在bean上创建了selectOneMenu,则忽视它(我认为它仍然有用)。