понимание поведения выполнения ajax с помощью datatable с использованием jsf 2.0 - PullRequest
1 голос
/ 01 февраля 2012

Я пытаюсь использовать кнопку поиска , которая возвращает выбранные элементы (может быть больше одного) и обновляет данные.Затем у меня есть selectBooleanCheckbox рядом с каждым столбцом, когда пользователь выбирает «n» элементов, затем нажимает Выберите отмеченные элементы , он вставляет БД.

Код можно увидеть ниже:

<h:panelGrid columns="5">
    <h:form>
      <h:outputText value="Item Name"/>
      <p:inputText value="#{StockController.itemName}"/>
      <h:commandButton value="Search" action="#{StockController.Search}">
         <f:ajax execute="@form" render=":results"/>
      </h:commandButton>
    </h:form>

// Пример кода ниже принадлежит BalusC, см. Сообщение здесь

    <h:panelGroup id="results">
    <h:form>
    <h:dataTable value="#{bean.entities}" var="entity">
        <h:column>
            <h:selectBooleanCheckbox value="#{bean.checked[entity.id]}" />
        </h:column>
        ...
    </h:dataTable>
    <h:commandButton value="Select the checked Items" action="#{StockController.insertDao}" >
  <f:ajax execute="@form" render=":results"/>
 </h:commandButton>
 </h:form>
</h:panelGrid>

Теперь я прочитал много блогов и Core javaServer Faces 3, я не знаюНе думаю, что есть логическая ошибка в использовании AJAX.Я проверил, удалив каждый ajax, затем оба отлично работают , но всякий раз, когда я пытаюсь использовать оба cummondButtons с ajax, второй " Выберите отмеченные элементы " делаетдаже не вызывайте "StockController.insertDao" метод.

Любая помощь приветствуется.

Спасибо всем.

1 Ответ

3 голосов
/ 01 февраля 2012

Если вы хотите ajax-рендеринг контента, который, в свою очередь, содержит другую форму, то вам нужно включить идентификатор этой формы также в атрибут render, в противном случае другая форма потеряет свое состояние просмотра и ничего не будетобрабатывается при отправке.

<h:form>
  ...
  <h:commandButton value="Search" action="#{StockController.Search}">
    <f:ajax execute="@form" render=":results :resultsForm" />
  </h:commandButton>
</h:form>

<h:panelGroup id="results">
  <h:form id="resultsForm">
    ...
  </h:form>
</h:panelGroup>

Если, тем не менее, ничего не выходит за пределы <h:form> внутри того же <h:panelGroup>, то вы можете просто пропустить <h:panelGroup> в целом и повторно визуализировать форму напрямую.

<h:form>
  ...
  <h:commandButton value="Search" action="#{StockController.Search}">
    <f:ajax execute="@form" render=":results" />
  </h:commandButton>
</h:form>

<h:form id="results">
  ...
</h:form>

Это связано с Спецификацией JSF 790 .

См. Также:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...