1

我正在向h:selectOneMenu页面动态添加一个。但是对于 selectItems 不会调用 forlistener方法,但如果从一开始就将其添加到页面中(不是使用属性动态添加),它确实可以工作。我的代码如下:f:ajaxh:selectOneMenuupdate

(根据@Daniel 的建议更正)

    <h:commandButton value="Watch">
          <f:ajax render="deptsSelBox"/>
          <f:setPropertyActionListener value="#{true}" target="#{listRetriever.allow}" />
    </h:commandButton>  

    <h:panelGroup id="deptsSelBox">
        <h:selectOneMenu id="deptsSel" rendered="#{listRetriever.allow}" value="#{listRetriever.reqId}">  
            <f:selectItems value="#{listRetriever.list}" />
            <f:ajax listener="#{listRetriever.retrieve()}" execute="deptsSel" />
        </h:selectOneMenu>
    </h:panelGroup>  
4

1 回答 1

1

h:commandButton没有update属性,看起来像是 primefaces 和纯 JSF 的混合体(update属性来自p:commandButton

添加f:ajax到您的commandButton和使用render属性

<h:commandButton value="Watch">
      <f:ajax render="deptsSelBox"/>
      <f:setPropertyActionListener value="#{true}" target="#{listRetriever.allow}" />
</h:commandButton>   

还将您的选择ajax修复为此

<f:ajax listener="#{listRetriever.retrieve}" update="deptsSel"/>

并尝试将范围从更改requestview

另一种方法是设置allow方法内部的值,像这样(您也可以将其作为参数发送)

<h:commandButton value="Watch" action="listRetriever.updateAllow">
      <f:ajax render="deptsSelBox"/>
</h:commandButton>  


public void updateAllow(){
     allow = true;
}
于 2012-05-24T06:04:42.670 回答