h:消息没有捕获消息。验证数据表,JSF



我对带有动态列的dataTable的消息呈现有一个问题。我想要消息显示在数据表的上方,但有一些麻烦与id。

<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 *'中输入相同的内容,一切都可以正常工作,但看起来非常难看。

这似乎很容易解决。你能帮我一下吗?

您使用a4j:commandButton,因此最好使用richfaces标记作为消息

Rich:消息很适合您的情况。使用它;)

我认为问题的根本原因是for="column_0"和id="column_#{ind}"不匹配。

检查

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

   <h:messages/>

,看看它是否捕获任何消息。

如果出现任何消息,请注意它的id以对照组件id进行检查。

编辑:尽量不要在你的id标签下使用score "_"

FROM 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"定义如上所示,则onchange事件后的Ajax将按预期处理。

虽然这个问题已经张贴了很长时间以前,我只是看到一个解决方案包装h:消息在a4j:outputPanel和添加ajaxRendered = true标签属性。它在我的项目中完美无缺。

根据我读到的帖子,原因是,对于Ajax JSF内容,当JSF第一次加载时,它不识别h:消息组件。按照建议,a4j:outputPanel会在组件树中插入不存在的子组件。关于ajaxRendered属性,使用它的原因是因为它将outputPanel(及其所有子组件)设置为在每次AJAX请求处理后用新值呈现。

相关内容

  • 没有找到相关文章

最新更新