2011-09-21 43 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'}]); 
相關問題