2011-09-21 25 views

回答

15

如果你有这样的定义的远程命令:

<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"); 
} 
+1

以及您通过JavaScript传递这些请求参数的方式? –

+1

其实我还没有找到足够的关于使用JavaScript传递参数到后台bean的信息。我在这里给出的信息与我在使用PrimeFaces remoteCommand方面的经验有关。可能有更好的实施方式。 – Neyko

+0

谢谢你将测试,如果这对我有用 –

17

无耻插入我的答案,因为它的成本我小时PrimeFace 3.3来解决这个问题。解决方法是将您的参数作为{名称:<参数名称>,值:<参数值>}的数组传递给您的参数。

正如Neyko的回答,调用应改为:

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

现在在primfaces 3.4.2中工作。从3.2迁移到3.4.2并停止调用。 Neyko的答案也应该更新。 – Vivek

+0

是的,我很高兴我进一步阅读并得到这个评论。 –

+0

@instcode有正确的答案,如果(像我一样)你第一次不理解它,让我们更加明确:你必须在文本上写“name:”和“value:”,因为它们是关键字。您不能用您的自定义名称(name1,例如...)替换name:。当然,冒号右边的内容可以是js变量或“常数”。再次感谢!你解决了我的问题! –

6

我试着用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

9

解决方案在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'}]); 
相关问题