JSからp:remoteCommand
(primefacesが提供)にパラメーターを渡すには、次を使用できます。
remoteCommandFunctionName({name1:'value1', name2:'value2'});
その後、バッキングBeanに送信するために、このパラメーターのセットをremoteCommand
でどのように受け取りますか?
PrimeFace 3.3でこの問題を解決するには何時間もかかるので、恥知らずに私の答えを差し込んでください。解決策は、引数を{name:<param-name>、value:<param-value>}の配列として渡すことです。
Neykoの回答のように、呼び出しは次のように変更する必要があります。
remoteCommandFunctionName([{name: 'name1', value: 'value1'}, {name: 'name2', value: 'value2'}]);
このようにリモートコマンドを定義した場合:
<p:remoteCommand name="remoteCommandFunctionName"
actionListener="#{myBean.exec}"/>
そして、パラメータを使用したJavascriptメソッド呼び出しがあります。
remoteCommandFunctionName({name1:'value1', name2:'value2'});
RemoteCommandへのJavascriptメソッド呼び出しに渡されるパラメーターを指定する必要はありません。結局のところ、バッキングBeanでこれらのパラメーターが必要になると思います。リクエストパラメータマップを使用して、バッキング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");
}
Instcodeのソリューションはprimefaces4.0で機能します
xhtml
<p:remoteCommand name="remoteCommandFunctionName" actionListener="#{myBean.exec}"/>
Bean
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'}]);
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);
}
}
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();
}
[〜#〜]編集[〜#〜]
また、これは完全に機能します。
remoteAction([{name: 'name1', value: 'value1'}, {name: 'name2', value: 'value2'}]);
お役に立てれば...