Как ajax рендерить только входные данные вместо всей формы - PullRequest
1 голос
/ 18 октября 2011

У меня есть форма в JSF 2.0 с большим количеством текста (меток) и флажков. Текст никогда не обновляется при отправке, но значения флажка изменяются.

Например:

<h:form>

  <h:outputLabel value="bla bla bla bla .. X 1000" id="lab1">
  <h:selectBooleanCheckbox for="lab1">

  <h:outputLabel value="bla bla bla bla .. X 1000" id="lab2">
  <h:selectBooleanCheckbox for="lab2">

  .... many more labels and checkboxes ...

  <h:commandButton>
      <f:ajax render="@form" execute="@form" />
  </h:commandButton>     

</h:form>

Проблема в том, что всякий раз, когда я делаю отправку, содержимое всей формы перерисовывается. Я хотел бы, чтобы только значения флажка были перерисованы. Это может сэкономить 90% от размера запроса.

Есть ли хорошее решение этой проблемы?

1 Ответ

1 голос
/ 18 октября 2011

Атрибут render принимает разделенную пробелами строку из нескольких идентификаторов компонентов.Вы можете указать идентификаторы компонентов нужных входных данных в атрибуте render вместо целых @form.

Ваша разметка вида недопустима (похоже, что вы перепутали метку for с вводом id), но в сущности это должно выглядеть так:

<h:outputLabel value="bla bla bla bla .. X 1000" for="lab1">
<h:selectBooleanCheckbox id="lab1">

<h:outputLabel value="bla bla bla bla .. X 1000" for="lab2">
<h:selectBooleanCheckbox id="lab2">

.... many more labels and checkboxes ...

<h:commandButton>
    <f:ajax execute="@form" render="lab1 lab2 lab3 lab4 ..." />
</h:commandButton>     

Обратите внимание, что он также принимает выражение EL.Если это динамически генерируемая форма и / или идентификатор и количество флажков заранее известны в компоненте, то вы должны иметь возможность использовать что-то вроде:

    <f:ajax execute="@form" render="#{bean.allCheckboxIds}" />
...