2013-04-10 78 views
1

我有一個使用ajax的搜索表單。在搜索字段searchKeyFieldIdkeyup事件期間,我需要更新同一面板網格中的所有其他字段。如何呈現除一個inputText之外的所有網格字段?

<h:panelGrid id="myGrid" columns="4" > 

    <!-- When searchKeyFieldId change ... --> 
    <!-- Need to render all the myGrid EXCEPT searchKeyFieldId --> 
    <h:outputText value="search key"/> 
    <h:inputText id="searchKeyFieldId" 
     value="#{MyController.searchKeyField}"  
     valueChangeListener="#{MyController.licenseNumberChange}" > 
     <a4j:ajax event="keyup" render="myGrid" /> 
    </h:inputText> 

    <h:outputText value=""/> 
    <h:outputText value=""/> 

    <!-- Target render fields --> 
    <h:outputText value="text1"/> 
    <h:inputText id="field1" 
     value="#{MyController.field1}"/> 

    <h:outputText value="text2"/> 
    <h:inputText id="field2" 
     value="#{MyController.field2}"/> 

    <h:outputText value="text3"/> 
    <h:inputText id="field3" 
     value="#{MyController.field3}"/> 
    ..... 
</h:panelGrid> 

然而,當我使用render="myGrid",然後在搜索領域也被更新,因此失去焦點。最終用戶必須再次單擊/聚焦輸入字段以繼續輸入。

所以,我需要如下更新只有特定的字段:

<a4j:ajax event="keyup" render="field1 field2 field3 field4 field5 ..." /> 

不過,我有很多領域,40準確地說,這種解決方案不會是一個很好的做法。

回答

3

該解決方案將不會是一個很好的做法

抱歉,這是荒謬的。它完全是你想要的工作,因此是正確的方法。讓自己完成並將其全部輸入。如有必要,您可以將樣板隱藏在bean屬性後面。

render="#{MyController.clientIdsToRender}" 

必要時,可以自動填充基於JSF組件樹的字符串,但是寫的代碼,將需要更多的字符超過必要硬編碼在視圖中已經definied的客戶端ID。

標準JSF和RichFaces中沒有其他方法。然而,PrimeFaces提供了PrimeFaces Selectors(PFS)的替代品。另請參閱此相關問題:How to exclude child component in ajax update of a parent component?

完全不同的替代方法是將面板網格分爲兩個面板網格,一個面板網格包含搜索輸入,另一個網格包含要更新的字段。如有必要,您可以將它們與CSS的良好鏡頭對齊。

+0

謝謝。你非常有幫助@BalusC – 2013-04-18 08:30:05

相關問題