2011-06-28 9 views
2

嘗試將Richfaces 3.3項目遷移到4.獲得rich:suggestionBox組件並將其轉換爲rich:autocomplete組件,但遇到重大麻煩。Richfaces 4自動完成組件AJAX值更新

要求是:填寫部分自動填充,它向用戶提供合適的選項。當用戶從下拉菜單中選擇一些內容時,組件應該更新它的值,禁用它自己,並且還計算/更新用戶可以編輯的輔助字段中的默認值。到目前爲止,我有這樣的:

<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> 

現在,當用戶選擇東西jsFunc被調用時,assignDefaultNickname叫,一切工作正常,除了一個事實,即計算在assignDefaultNickname,用來確定的值輔助字段individualUserStr取決於species_name的值,但在我提交表單之前不會提交species_name,因此在assignDefaultNickname中完成的計算不正確。

我需要以某種方式調用個人Bean.selectedIndividualElem.userCommonNamesetter,在assignDefaultNickname被調用之前,但我無法弄清楚如何做到這一點。 AJAX和這個自動完成功能似乎有問題;這就是爲什麼我必須首先使用這個循環的jsFunction組件甚至調用方法的原因的一部分。

關於如何解決這個問題的任何建議?

回答

1

找到解決我自己的問題。基本上,需要學習如何使用execute屬性。其他任何JSF 2.0 n00bs的教訓是使用execute來選擇性地重新處理頁面。通過執行,您可以創建一個以空格分隔的組件ID列表,這些組件ID應該將其值重新綁定到支持bean,以防需要在響應AJAX事件的偵聽器中使用它們。在我而言,這意味着改變jsFunction標籤如下:

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

正如你所看到的,jsFunction現在,當它被調用assignDefaultNickname功能將首先更新勢必都自動完成和值inputText組件,然後運行assignDefaultNickname。