h: сообщение не перехватывает сообщение проверка для dataTable, JSF - PullRequest
0 голосов
/ 19 апреля 2011

У меня проблема с отображением сообщений для таблицы данных с динамическими столбцами.Я хочу, чтобы сообщение отображалось над таблицей данных, но есть некоторые проблемы с идентификаторами.

<h:form id="formId">

<!-- Here the jsf has to recognize id column_0 but it doesn't-->
   <h:message  styleClass="validationError"  for="column_0" />
   <rich:dataTable id="priorityTable" value="#{bean.matrix}" var="priority">
        <rich:columns value="#{bean.ordersOrigin}"
                                      var="ordersOrigin"
                                      index="ind">
           <f:facet name="header">
               <h:outputText value="#{ordersOrigin}" />
           </f:facet>
        <!-- Here i have ids from column_0 to column_2-->
           <h:inputText value="#{priority[ind].value}" id="column_#{ind}">
               <f:validator validatorId="priorityValueValidator"/>
           </h:inputText>
        <!-- Line * -->
        </rich:columns>
  </rich:dataTable>
  <br/>
  <a4j:commandButton value="Apply" action="#{bean.apply}" reRender="formId"/>

</h:form>

Проблема в том, что h: message не перехватывает сообщение.Но если я добавлю то же самое в 'Line *', все будет работать, но выглядит очень некрасиво.

Кажется, это действительно легко решить.Не могли бы вы помочь мне с этим?

Ответы [ 3 ]

0 голосов
/ 19 апреля 2011

Вы используете a4j: commandButton, поэтому лучше использовать тег richfaces для сообщения.

Rich: сообщения работают нормально для вашего случая. Используйте это;)

0 голосов
/ 05 февраля 2013

Хотя этот вопрос был опубликован давным-давно, я только что видел обходной путь, заключающийся в переносе h: message в a4j: outputPanel и добавлении атрибута тега ajaxRendered = true. Это работало безупречно в моем проекте.

Согласно сообщению, которое я прочитал, причина этого в том, что для содержимого Ajax JSF при первой загрузке jsf он не распознает компонент h: message. В соответствии с предложением a4j: outputPanel вставляет отсутствующие дочерние компоненты в дерево компонентов. Что касается атрибута ajaxRendered, причина его использования заключается в том, что он устанавливает для outputPanel (со всеми его дочерними компонентами) новые значения после каждой обработки запроса AJAX.

0 голосов
/ 19 апреля 2011

Я думаю, что основной причиной проблемы является for = "column_0", а id = "column_ # {ind}" не совпадает.

Чтобы проверить это.

Изменить

   <h:message  styleClass="validationError"  for="column_0" />

до

   <h:messages/>

и посмотрите, перехватывает ли оно какое-либо сообщение.

Если появляется какое-либо сообщение, обратите внимание, что его идентификатор сравнивается с идентификатором компонентов.

РЕДАКТИРОВАТЬ: Старайтесь не использовать под знаком "_" в теге id.

ОТ JBOSS DOC

Примечание:

Поскольку 3.3.0GA требует явного определения «id» для дочерних компонентов, чтобы обеспечить правильную работу процесса декодирования.Пример того, как вы можете определить уникальный «id» для дочернего компонента:

<rich:columns value="#{bean.columns}" var="col" index="ind" ... >

        <h:inputText id="input#{ind}" value="">

                <a4j:support id="support#{ind}" event="onchange" reRender="someId" />

        </h:inputText>

</rich:columns> 

Только если «id», определенный как показано выше, Ajax после события onchange будет обработан, как и ожидалось.

...