h:消息没有捕获消息。 dataTable,jsf的验证

时间:2011-04-19 08:23:04

标签: jsf richfaces ajax4jsf

我对使用动态列的dataTable进行消息呈现存在问题。 我希望消息显示在数据表上方,但是有一些ids的麻烦。

<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 :(得分:0)

我认为问题的根本原因是=“column_0”而id =“column _#{ind}”不匹配。

检查一下。

更改

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

   <h:messages/>

并查看它是否捕获了任何消息。

如果出现任何消​​息,请记下它的ID以检查您的组件ID。

编辑:尽量不要在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> 

只有在onchange事件之后定义如上所示的“id”才会按预期处理。

答案 1 :(得分:0)

您使用a4j:commandButton,因此最好将richfaces标记用于消息。

Rich:邮件适合您的情况。使用它;)

答案 2 :(得分:0)

虽然很久以前就已经发布了这个问题,但我刚刚看到一个解决方法,在a4j:outputPanel中包含h:message并添加ajaxRendered = true标记属性。它在我的项目中完美无缺。

根据我读到的帖子,其原因是,对于Ajax JSF内容,首次加载jsf时,它无法识别h:message组件。按照建议执行a4j:outputPanel在组件树中插入不存在的子组件。关于ajaxRendered属性,使用它的原因是因为它设置outputPanel(及其所有子组件)在每次AJAX请求处理后使用新值进行渲染。