为了将参数从JS传递到p:remoteCommand
(由primefaces 提供),您可以使用:
remoteCommandFunctionName({name1:'value1', name2:'value2'});
之后,如何在remoteCommand
中收到这组参数,以便将其发送给支持bean?
答案 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'}]);
希望这会有所帮助......