Richfaces: поддержка a4j (action, actionListener) для inputText внутри dataTable - PullRequest
1 голос
/ 25 июля 2011

У меня есть страница JSP, на которой пользователю необходимо разрешить редактировать данные из столбца и, когда форма отправлена, обновить соответствующую таблицу в базе данных.Число строк в этой таблице является переменной.

Для редактируемого информационного поля у меня есть следующий фрагмент кода (назовем его Блок A ) на странице JSP:

  <h:inputText value="#{myBackingBean.theFieldValue}" >
    <a4j:support event="onchange" actionListener="#{myBackingBean.theActionListener}" action="#{myBackingBean.theAction}"/>
  </h:inputText>

Следующий фрагмент кода (назовем его Блок B ) взят из базового компонента:

public String theAction() {
    String outcome = null;
    System.out.println("the action method was invoked");
    return outcome;
}

public void theActionListener(ActionEvent actionEvent) {
    System.out.println("the action listener method was invoked");
}

Как вы можете видеть, каждый раз, когда вызываются эти методы, которые выводятся на консольвыходные данные.

Моя проблема: Когда я помещаю Блок A внутрь следующего блока ( один компонент inputText в форме):

<h:form id="myForm">
  (...)
    here I put Block A
  (...)
</h:form>

Блок B вызывается без проблем.Но если вместо этого я помещу Блок A в компонент rich: dataTable, как мне нужно ( несколько компонентов inputText в форме), чтобы сохранить значение inputText каждой строки в базе данных (вот где мне нужно вызвать методы action и / или actionListener):

<h:form id="myForm">
  <rich:dataTable id="myDataTable" value="#{myBackingBean.myObjectList}" var="item" binding="#{myBackingBean.myObjectHtmlDataTable}" rendered="#{!empty myBackingBean.myObjectList}" rows="20">
    (...)
      <rich:column>
          here I put Block A
      </rich:column>
    (...)
  </rich:dataTable>
</h:form>

в этом случае Block B никогда не достигается.

I'mпри работе с JSF 1.2 и RichFaces 3.3.3 все необходимые компоненты и правила навигации настроены правильно.Все необходимые геттеры и сеттеры находятся в соответствующих классах.

Пожалуйста, не могли бы вы дать мне несколько советов, чтобы мой код работал правильно?Заранее спасибо.

1 Ответ

0 голосов
/ 26 июля 2011

Я проверяю ваш код, и он работает очень хорошо.Оба метода действия могут работать.

Это может произойти из-за того, что другие компоненты в вашей форме имеют ошибки при обработке на сервере, так что методы компонента не могут быть запущены.

Вы можете попытаться ограничить сервер только обработкой измененных <h:inputText> с использованием <a4j:region>. Если затем можно вызвать методы действия, можно подтвердить, что это связано с другими компонентами в вашей форме.

<rich:column>
  <a4j:region>
        <h:inputText value="#{myBackingBean.theFieldValue}" >
                <a4j:support event="onchange" actionListener="#{myBackingBean.theActionListener}"   action="#{myBackingBean.theAction}"/>
        </h:inputText>
    </a4j:region>
</rich:column>

Если ваш <h:form> имеет обработчик onsubmit(), также убедитесь, что он возвращает true для отправки формы.

...