2011-11-28 19 views
7

私のプロジェクトの検索フォームにPrimeFaces p:autoCompleteウィジェットを使用しています。ユーザーは、含める必要のあるフォーム要素数(検索パラメータ)をいくつでも選択することができます。そのため、それぞれにIDをcompleteMethodに渡す必要があります。私はonfocus=".."を追加してオブジェクトをBeanに渡そうとしましたが、要素が最初にロードされたときにのみ起動されます。p:autoCompleteのcompleteMethodへのパラメータの受け渡し

私の質問:どのように属性をcompleteMethodに渡すことができますか?要素(シンプル)の

XHTML:

<p:autoComplete value="#{filter.value}" label="dynamic search attribute" 
       completeMethod="#{myBean.complete}" /> 

豆(シンプル):理論的には

@Named("myBean") 
public class MyController implements Serializable { 

    public List<String> complete(String query) { 
     List<String> results = new ArrayList<String>(); 
     // ... code 
     return results; 
    } 
} 

これは完璧なソリューションのように思える:

<p:autoComplete value="#{filter.value}" label="dynamic search attribute" 
       completeMethod="#{myBean.complete(filter)}" /> 

そして、再び豆:

あなたは、

public List<String> complete(String query) { 
    FacesContext context = FacesContext.getCurrentInstance(); 
    FilterObject o = (FilterObject) UIComponent.getCurrentComponent(context).getAttributes().get("filter"); 
    // ... 
} 

また、その#{filter}はELスコープにすでにあることを、あなたの場合に表示されている:

答えて

22

あなたは属性として設定することができます

<p:autoComplete value="#{filter.value}" label="dynamic search attribute" completeMethod="#{myBean.complete}"> 
    <f:attribute name="filter" value="#{filter}" /> 
</p:autoComplete> 

UIComponent#getCurrentComponent()でそれを得ます<f:attribute>を離れたままにして、Application#evaluateExpressionGet()

の助けを借りてプログラムでEL式を評価することで得ることができます

それとも、それはまた@Named豆であれば、あなただけ@Injectそれは親豆にすることができます

@Inject 
private FilterObject o; 
+1

私は両方の提案sollutionsを試してみましたが、彼らの両方が魅力のように働きました。私は2番目のアプローチを選んだので、属性は必要ありません。どうもありがとう! –

+0

ようこそ。私はあなたにもうまくいくかもしれない '@ Inject'提案を追加しました。 – BalusC

関連する問題