对于从JS传递paramters到p:remoteCommand
(由primefaces提供),您可以使用此:如何将参数(从JavaScript)传递到remoteCommand(&然后将其发送到支持bean)?
remoteCommandFunctionName({name1:'value1', name2:'value2'});
之后,你是怎么得到这组参数remoteCommand
它发送到支持豆?
对于从JS传递paramters到p:remoteCommand
(由primefaces提供),您可以使用此:如何将参数(从JavaScript)传递到remoteCommand(&然后将其发送到支持bean)?
remoteCommandFunctionName({name1:'value1', name2:'value2'});
之后,你是怎么得到这组参数remoteCommand
它发送到支持豆?
如果你有这样的定义的远程命令:
<p:remoteCommand name="remoteCommandFunctionName"
actionListener="#{myBean.exec}"/>
和你有一个带参数的Javascript方法调用:
remoteCommandFunctionName({name1:'value1', name2:'value2'});
你并不需要指定传递给Javascript方法调用的参数进入remoteCommand。毕竟,我认为你需要支持这些参数。您可以使用请求参数映射,以获得在支持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");
}
以及您通过JavaScript传递这些请求参数的方式? –
其实我还没有找到足够的关于使用JavaScript传递参数到后台bean的信息。我在这里给出的信息与我在使用PrimeFaces remoteCommand方面的经验有关。可能有更好的实施方式。 – Neyko
谢谢你将测试,如果这对我有用 –
无耻插入我的答案,因为它的成本我小时PrimeFace 3.3来解决这个问题。解决方法是将您的参数作为{名称:<参数名称>,值:<参数值>}的数组传递给您的参数。
正如Neyko的回答,调用应改为:
remoteCommandFunctionName([{name: 'name1', value: 'value1'}, {name: 'name2', value: 'value2'}]);
现在在primfaces 3.4.2中工作。从3.2迁移到3.4.2并停止调用。 Neyko的答案也应该更新。 – Vivek
是的,我很高兴我进一步阅读并得到这个评论。 –
@instcode有正确的答案,如果(像我一样)你第一次不理解它,让我们更加明确:你必须在文本上写“name:”和“value:”,因为它们是关键字。您不能用您的自定义名称(name1,例如...)替换name:。当然,冒号右边的内容可以是js变量或“常数”。再次感谢!你解决了我的问题! –
我试着用primefaces 4.0以前的解决方案,但他们并没有为我工作。
因此,作为一种变通方法,我不得不把<h:inputHidden>
并将其值设置为ManagedBean, 和属性只是我设置H的值之前调用<p:remoteCommand>
:inputHidden(使用jQuery),并调用号码: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();
}
EDIT
而且这工作完全..
remoteAction([{name: 'name1', value: 'value1'}, {name: 'name2', value: 'value2'}]);
希望这有助于...从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'}]);
此处的答案已过时,请参阅http://stackoverflow.com/a/18510102/55070 – leo