在selectOneMenu中为某些selectItem触发AJAX

时间:2014-02-18 14:21:51

标签: jsf jsf-2 primefaces selectonemenu

我有以下selectOneMenu

<p:selectOneMenu value="#{bean.value}">
    <f:selectItem value="#{bean.item1}"/>
    <f:selectItem value="#{bean.item2}"/>
    <f:selectItem value="#{bean.item3}"/>

    <p:ajax listener="#{bean.item3AjaxEvent}" update="fieldToUpdate"></p:ajax>

</p:selectOneMenu>

现在我只想在selectOneMenu中选择item3时才进行一些AJAX操作。不是所有的项目。有没有办法做到这一点?

放置ajax标记将触发所有选定项目的事件。我不想为服务器生成不需要的ajax请求。

1 个答案:

答案 0 :(得分:1)

我会这样做。

XHTML

 <p:selectOneMenu widgetVar="selectOneMenuWV"
                  onchange="checkItem()">  
   <f:selectItem itemLabel="Select One" itemValue="" />  
   <f:selectItem itemLabel="Option 1" itemValue="1" />  
   <f:selectItem itemLabel="Option 2" itemValue="2" />  
   <f:selectItem itemLabel="Option 3" itemValue="3" />                             
 </p:selectOneMenu> 


<p:remoteCommand name="myRemoteCommand" 
             actionListener="#{bean.item3AjaxEvent()}"  
             update="fieldToUpdate"/>

<script>
    function checkItem() {
       if(selectOneMenuWV.getSelectedValue() == 3) {
            myRemoteCommand();
       }
    }
</script>

希望这有帮助。