2016-03-02 31 views
1

我使用JSF 2.2 PrimeFaces 5.3和我試圖與p:autoComplete號碼:自動完成 - 傳遞的參數

我覺得我做某種類型的語法錯誤的工作,但我不能夠找到它

我有這片

<h:selectOneMenu id="countryDropdown" value="#{myController.selectedCountryId}"> 
    <f:selectItems value="#{myController.countries}" var="co" itemValue="#{co.id}" itemLabel="#{msg[co.name]}"/> 
</h:selectOneMenu> 

<p:autoComplete 
    dropdown="true" 
    value="#{myController.selectedAutocompleteId}" 
    completeMethod="#{myController.callMyAutocompleteMethod}"> 
     <f:attribute name="selectedCountryId" value="#{carCountryDropdown}" /> 
</p:autoComplete> 

頁的爲了進行自動完成任務,我需要「countryDropdown」也值。 我需要使用哪種語法才能在自動完成方法中檢索「countryDropdown」選擇項的值?

內自動完成的方法,我可以使用下面的代碼

UIComponent.getCurrentComponent(context).getAttributes().get("selectedCountryId"); 

,但我總是得到空。

你能幫我嗎?

+0

爲什麼不直接使用'countryDropDown'中的ajax在自動完成方法中選擇並使用bean值時設置它的值? – Kukeltje

+0

因爲我會執行太多無用的請求 – Gavi

+0

有多少個?一?二?好的... – Kukeltje

回答

1

您可以使用Ajax,<號碼:selectOneMenu用於>支持更改事件:

< p:selectOneMenu ..> 
    < p:ajax event="change" listener="#{myController.subjectSelectionChanged}" /> 
    <!--...--> 
< /p:selectOneMenu> 

觸發聽者subjectSelectionChanged中,你可以在carCountryDropdown返回「countryDropdown」的價值

+0

是的,但如果您同意我的觀點,這不是最好的解決方案,因爲如果我們更改5次「countryDropdown」和1次自動填充小部件,我將創建6個不同的請求。只有當用戶更改自動填充小部件時,我才能嘗試發出請求? – Gavi

+0

而相反呢?如果用戶執行8次自動完成並且selectOneMenu 1次將其發送並處理爲經常...如上所述,提前優化 – Kukeltje

+0

如果用戶執行了8次自動完成,因爲應用程序無法理解哪些請求是無用的。例如,我們可以設置某種「延遲」,以避免在時間上過於接近的請求。我瞭解你,但不是不成熟的優化。但我只是想找到最好的解決方案。我感謝你的幫助。這只是與您分享(或共同找到)一些適用於所有社區的適當解決方案 – Gavi

相關問題