如何将参数(从javascript)传递到remoteCommand(然后将其发送到支持bean)?

时间:2011-09-21 09:45:53

标签: jsf primefaces

为了将参数从JS传递到p:remoteCommand由primefaces 提供),您可以使用:

remoteCommandFunctionName({name1:'value1', name2:'value2'});

之后,如何在remoteCommand中收到这组参数,以便将其发送给支持bean?

4 个答案:

答案 0 :(得分:17)

无耻地插入我的答案,因为在PrimeFace 3.3中解决这个问题花了我几个小时。解决方案是将您的参数作为{name:< param-name>,value:< param-value>}的数组传递。

在Neyko的回答中,调用应更改为:

remoteCommandFunctionName([{name: 'name1', value: 'value1'}, {name: 'name2', value: 'value2'}]);

答案 1 :(得分:15)

如果你已经定义了这样的远程命令:

<p:remoteCommand name="remoteCommandFunctionName" 
                 actionListener="#{myBean.exec}"/>

你有一个带参数的Javascript方法调用:

remoteCommandFunctionName({name1:'value1', name2:'value2'});

您无需指定传递给remoteCommand的Javascript方法调用的参数。我认为毕竟你需要在支持bean中使用这些参数。您可以使用请求参数映射来获取在backing bean方法中的JavaScript调用中传递的参数的值:

public void exec() {
    FacesContext context = FacesContext.getCurrentInstance();
    Map map = context.getExternalContext().getRequestParameterMap();
    String name1 = (String) map.get("name1");
    String name2 = (String) map.get("name2");
}

答案 2 :(得分:9)

instcode的解决方案在primefaces 4.0中发挥作用 的 XHTML

<p:remoteCommand name="remoteCommandFunctionName" actionListener="#{myBean.exec}"/>

<强>豆

public void exec() {
    FacesContext context = FacesContext.getCurrentInstance();
    Map map = context.getExternalContext().getRequestParameterMap();
    String name1 = (String) map.get("name1");
    String name2 = (String) map.get("name2");
}

<强>的JavaScript

remoteCommandFunctionName([{name: 'name1', value: 'value1'}, {name: 'name2', value: 'value2'}]);

答案 3 :(得分:6)

我尝试使用primefaces 4.0的先前解决方案,但它们对我不起作用。

因此,作为一种解决方法,我必须放置<h:inputHidden>并将值设置为ManagedBean的属性, 在调用<p:remoteCommand>之前我设置了这个 h的值:inputHidden (使用jQuery)并调用 p:remoteCommand (确保远程命令)正在处理 h:inputHidden

<强> FormBean.java

@ManagedBean(name = "formBean")
@ViewScoped
public class FormBean {

  private String myValue;

  public String getMyValue() {
   return myValue;
  }

  public void setMyValue(String myValue) {
      this.myValue = myValue;
  }

  public void remoteAction() {
     someAction(myValue);
  }

}

<强> form.xhtml

.....
<p:remoteCommand name="remoteAction" actionListener="#{formBean.remoteAction()}" process="@this myValueHidden" />

<h:inputHidden id="myValueHidden" value="#{formBean.myValue}" />
.....

<强> form.js

function onClickOfSomeButton() {
$('#formName\\:myValueHidden').val('myValue test value');
  remoteAction();   
}

修改

这也完美无缺。

remoteAction([{name: 'name1', value: 'value1'}, {name: 'name2', value: 'value2'}]);

希望这会有所帮助......