2011-06-28 7 views
2

Richfaces 3.3プロジェクトを4に移行しようとしています。rich:suggestionBoxコンポーネントをリッチ:オートコンプリートコンポーネントに変換しますが、大きな問題があります。Richfaces 4オートコンプリートコンポーネントAJAXバリューアップデート

要件は次のとおりです。オートコンプリートの一部を記入し、ユーザーに適切なオプションを提示します。ユーザーがドロップダウンから何かを選択すると、コンポーネントはその値を更新し、それ自体を無効にし、ユーザーが編集できる2次フィールドのデフォルト値を計算/更新する必要があります。これまでのところ私はこれ持っている:ユーザーがjsFuncが呼び出されるものを選択したときに、今

<a4j:jsFunction name="jsFunc" 
    execute="autoComplete" 
    render="species_name individualUserStr" 
    actionListener="#{individualsBean.selectedIndividualElem.assignDefaultNickname}"/> 


<rich:autocomplete 
autocompleteMethod="#{individualsBean.speciesForBox}" 
mode="cachedAjax" 
layout="table" 
var="sp" 
id="species_name" 
value="#{individualsBean.selectedIndividualElem.userCommonName}" 
fetchValue="#{sp.commonName}" 
disabled="#{individualsBean.selectedIndividualElem.userCommonName != null 
    and individualsBean.selectedIndividualElem.userCommonName ne ''}" 
onselectitem="jsFunc()" 

> 
... 
</rich:autocomplete> 

<h:inputText value="#{individualsBean.selectedIndividualElem.ssi.individualUserStr}" 
id="individualUserStr" 
maxlength="28" 
styleClass="inputTextMediumRF"> 
</h:inputText> 

を、assignDefaultNicknameが呼び出され、すべてがassignDefaultNicknameの計算は、の値を決定するために使用するという事実を除いて、正常に動作しますセカンダリフィールドindividualUserStrはspecies_nameの値に依存しますが、フォームをサブミットするまで、species_nameはサブミットされないため、assignDefaultNicknameで実行された計算は正しくありません。

assignDefaultNicknameが呼び出される前にsomeBean.selectedIndividualElem.userCommonNameで何らかの方法でセッターを呼び出す必要がありますが、これを行う方法がわかりません。 AJAXとこのオートコンプリート機能に問題があるようです。これは、このラウンド・アット・バウトのjsFunctionコンポーネントを使用して、最初にメソッドを呼び出す必要がある理由の一部です。

これを解決する方法の提案はありますか?

答えて

1

私自身の質問に対する解決策が見つかりました。基本的には、execute属性の使い方を学ぶ必要があります。他のJSF 2.0 n00bsの教訓は、executeを使用してページを選択的に再処理することです。実行すると、AJAXイベントに応答するリスナーで使用する必要がある場合に備えて、値をバッキングBeanに再バインドする必要があるコンポーネントIDのホワイトスペースで区切られたリストを作成できます。次のように私の場合、これはjsFunctionタグを変える意味:

<a4j:jsFunction name="jsFunc" 
execute="species_name individualUserStr" 
render="species_name individualUserStr" 
actionListener="#{individualsBean.selectedIndividualElem.assignDefaultNickname}"/> 

あなたが見ることができるように、今jsFunction、それは最初のオートコンプリートとの両方に結合された値を更新しますassignDefaultNickname関数を呼び出しているとき、 inputTextコンポーネントを実行し、次にassignDefaultNicknameを実行します。

関連する問題