我对使用动态列的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 *'中,一切都有效,但看起来很难看。
这似乎很容易解决。你能帮帮我吗?
答案 0 :(得分:0)
我认为问题的根本原因是=“column_0”而id =“column _#{ind}”不匹配。
检查一下。
更改
<h:message styleClass="validationError" for="column_0" />
到
<h:messages/>
并查看它是否捕获了任何消息。
如果出现任何消息,请记下它的ID以检查您的组件ID。
编辑:尽量不要在ID标记中使用得分“_”
注意:强>
由于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请求处理后使用新值进行渲染。