對於從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