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

Raj*_*pta 14 jsf primefaces

对于从JS传递参数p:remoteCommand(由primefaces提供),您可以使用:

remoteCommandFunctionName({name1:'value1', name2:'value2'});
Run Code Online (Sandbox Code Playgroud)

之后,如何将这组参数remoteCommand发送给支持bean?

ins*_*ode 17

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

与Neyko的回答一样,调用应更改为:

remoteCommandFunctionName([{name: 'name1', value: 'value1'}, {name: 'name2', value: 'value2'}]);
Run Code Online (Sandbox Code Playgroud)


Ney*_*yko 16

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

<p:remoteCommand name="remoteCommandFunctionName" 
                 actionListener="#{myBean.exec}"/>
Run Code Online (Sandbox Code Playgroud)

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

remoteCommandFunctionName({name1:'value1', name2:'value2'});
Run Code Online (Sandbox Code Playgroud)

您不需要将传递给Javascript方法调用的参数指定为remoteCommand.我认为毕竟你需要在支持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");
}
Run Code Online (Sandbox Code Playgroud)


Leo*_*rko 9

instcode的解决方案适用于primefaces 4.0

xhtml

<p:remoteCommand name="remoteCommandFunctionName" actionListener="#{myBean.exec}"/>
Run Code Online (Sandbox Code Playgroud)

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

JavaScript的

remoteCommandFunctionName([{name: 'name1', value: 'value1'}, {name: 'name2', value: 'value2'}]);
Run Code Online (Sandbox Code Playgroud)


Hat*_*mam 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);
  }

}
Run Code Online (Sandbox Code Playgroud)

form.xhtml

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

<h:inputHidden id="myValueHidden" value="#{formBean.myValue}" />
.....
Run Code Online (Sandbox Code Playgroud)

form.js

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

编辑

这也很完美..

remoteAction([{name: 'name1', value: 'value1'}, {name: 'name2', value: 'value2'}]);
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助...