对于从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)
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)
我尝试使用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)
希望这可以帮助...
| 归档时间: |
|
| 查看次数: |
29701 次 |
| 最近记录: |