2013-04-10 3 views
1

У меня есть форма поиска, которая использует ajax. Во время события keyup поля поиска searchKeyFieldId мне нужно обновить все остальные поля в той же панели.Как визуализировать все поля Grid, кроме одного 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

это решение не было бы хорошей практикой

Извините, но это смешно. Он выполняет именно ту работу, которую вы хотите, и, следовательно, правильный подход. Получите себя над этим и наберите их все. Вы можете, если необходимо, спрятать шаблон за бобовым имуществом.

render="#{MyController.clientIdsToRender}" 

Вы можете при необходимости заполняются автоматически струна на основе дерева компонентов JSF, но написание кода для этого потребуется больше символов, чем необходимо жёстко идентификаторы клиентов уже определяемом в представлении.

В стандартном JSF и RichFaces нет другого способа. Однако PrimeFaces предлагает альтернативу по вкусу PrimeFaces Selectors (PFS). См. Также этот вопрос: How to exclude child component in ajax update of a parent component?

Совершенно другой вариант состоит в том, чтобы разделить решетку панели на две панельные решетки, одну из которых содержит вход для поиска, а другой - поля, подлежащие обновлению. Вы можете выровнять их с хорошим снимком CSS, если это необходимо.

+0

Спасибо человеку. Вы очень полезны @BalusC –

Смежные вопросы