2011-09-21 23 views
14

JSからparamsをprimefacesが提供するp:remoteCommandに渡すには、次のようにします:あなたはどのようにremoteCommandにパラメータを(JavaScriptから)渡しますか(そして、それをバッキングBeanに送ります)?

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

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

+0

答えは古く、http://stackoverflow.com/a/18510102/55070 – leo

答えて

15
あなたは、このようにリモートコマンドを定義した場合

<p:remoteCommand name="remoteCommandFunctionName" 
       actionListener="#{myBean.exec}"/> 

そして、あなたはパラメータを持つJavaScriptのメソッド呼び出しがあります:あなたはJavaScriptのメソッド呼び出しに渡されたパラメータを指定する必要はありません

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

をremoteCommandに入力します。結局のところ、裏口にこれらのパラメータが必要になると思います。あなたはバッキングBeanのメソッドのJavaScript呼び出しで渡されたパラメータの値を取得するリクエストパラメータマップを使用することができます。PrimeFace 3.3でこの問題を解決するために私に時間がかかりますので

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

は臆面もなく私の答えを差し込みます。解決策は、{name:< param-name >、値:< param-value >}の配列として引数を渡すことです。

Neykoの答えのように、呼び出しは次のように変更します。

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

今すぐprimfaces 3.4.2で動作します。 3.2から3.4.2に移行し、呼び出しを停止しました。ネイコの答えも更新する必要があります。 – Vivek

+0

私はさらに読んでよかったと確信して、このコメントになった。 –

+0

@instcodeは正しい答えを持っていますが、私のように初めて理解できなかった場合は、もっと明示してみましょう。キーワードであるため、「名前:」と「値:」をテキストで入力する必要があります。 name:をあなたのカスタム名(name1など)に置き換えることはできません。もちろん、コロンの右に行くものは、js変数または '定数'にすることができます。再度、感謝します!あなたは私の問題を解決する! –

6

私はprimefaces 4.0と以前の解決策を試してみましたが、彼らは私のために動作しませんでした。

だから回避策として、私は 、<h:inputHidden>を入れてManagedBeanのプロパティに値を設定しなければならなかったし、ちょうど<p:remoteCommand>を呼び出す前に、私はこのhの値を設定します(jQueryのを使用して)inputHiddenと呼んでpは:

FormBean.java

(inputHidden
リモートコマンドは、 Hを処理して確認することで)をremoteCommand
@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'}]); 
01で動作します
関連する問題