primefaces p:ajax返回值

时间:2014-06-11 14:07:38

标签: jsf-2 primefaces

我有一个带有primefaces 4.0的JSF 2.2应用程序。我有一个带有一些checkbox的页面。我想要实现的是,当我点击一个复选框时,ajax请求将被触发到我的托管bean。该请求将触发一个返回字符串的方法。所以我不需要更新一个元素,但是要在js中找回字符串,因为如果我实现了那个,那么我可以返回一个JSON。
我有这段代码:

<p:selectManyCheckbox  id="queues" value="#{viewAssignUsersMB.queueIds}" layout="grid" columns="3" converter="javax.faces.Long" converterMessage="Error."> 
<f:selectItems  value="#{viewAssignUsersMB.queues}" 
                var="queue" 
                itemValue="#{queue.id}" 
                itemLabel="#{queue.application.name}"/>
<p:ajax  process="@this" partialSubmit="true" event="change" listener="#{viewAssignUsersMB.xxx()}" async="true" oncomplete="handleSaveRequest(xhr, status, args)"/>

和支持bean中的这个方法:

public void xxx(){  
  RequestContext.getCurrentInstance().addCallbackParam("stringToBePassed","TriluLilu");
}

和我的js回调方法:

function handleSaveRequest(xhr, status, args) { 
    alert('User with username ' +args.stringToBePassed+ ' is saved successfully');
}

我现在的主要问题是我不知道如何检测上次按下的复选框,因为在我的支持bean中我已经选中了所有复选框(#{viewAssignUsersMB.queueIds})...
有没有更好的方法,因为这是一个非常常见的场景/什么是&#34;经典&#34;实现这一目标的方法......?

1 个答案:

答案 0 :(得分:0)

您可以使用remoteCommand实现此目的。

  • 首先:在所有复选框输入上挂钩onchange事件。
  • 第二:在事件函数处理程序中,获取元素值,并将值传递给remoteCommand。
  • 第三:读取辅助bean中的值,作为请求参数。

<强> XHTML

 <p:selectCheckboxMenu id="selectCheckboxMenuId" widgetVar="selectCheckWV">  
    <f:selectItems value="#{mainBean.map}" />                              
 </p:selectCheckboxMenu>  
 <p:remoteCommand name="submitNewCheckBoxValue" 
                  process="@this selectCheckboxMenuId"
                  actionListener="#{mainBean.sendLastCheckedBox()}" />

<强> 的javascript

<script>
   $(document).ready(function() {
      PF('selectCheckWV').inputs.change(function() {
         if($(this).prop('checked'))
            submitNewCheckBoxValue([{name: 'submitedValue', value: $(this).val()}]);
      });
   });
</script>

<强> managedBean

public void sendLastCheckedBox() {
    FacesContext facesContext = FacesContext.getCurrentInstance();
    Map map = facesContext.getExternalContext().getRequestParameterMap();
    String submitedValue = (String) map.get("submitedValue");
    FacesMessage facesMessage = new FacesMessage(submitedValue);
    facesContext.addMessage(null, facesMessage);
}

这是一个有效的Demo,以及github上的一个小例子[1] [2]

希望这有帮助。