web-dev-qa-db-ja.com

パラメータ(javascriptから)をremoteCommandに渡す(&それをバッキングBeanに送信する)にはどうすればよいですか?

JSからp:remoteCommandprimefacesが提供)にパラメーターを渡すには、次を使用できます。

remoteCommandFunctionName({name1:'value1', name2:'value2'});

その後、バッキングBeanに送信するために、このパラメーターのセットをremoteCommandでどのように受け取りますか?

14
Rajat Gupta

PrimeFace 3.3でこの問題を解決するには何時間もかかるので、恥知らずに私の答えを差し込んでください。解決策は、引数を{name:<param-name>、value:<param-value>}の配列として渡すことです。

Neykoの回答のように、呼び出しは次のように変更する必要があります。

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

このようにリモートコマンドを定義した場合:

<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");
}
16
Neyko

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'}]);
9
Leon Borko

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'}]);

お役に立てれば...

6
Hatem Alimam