我正在使用primefaces 3.3。
我有一个像这样的dataTable:
<p:dataTable value="#{someBean.items}" var="item" ..>
<p:column>
<p:inputText id="someInputText" validation="#{someBean.someValidator}">
</p:column>
..
</p:dataTable>
验证器是标准的:
public void someValidator (FacesContext context, UIComponent component, Object value) throws ValidatorException {
if(someCondition) {
throw new ValidatorException(
new FacesMessage(FacesMessage.SEVERITY_ERROR, "error: ", "validation failed"));
}
我遇到的问题是,如果dataTable中有多个项目,并且如果对其中一个项目的inputText组件“someInputText”的验证失败,则会为每个项目显示验证错误消息。
我有什么想法可以解决这个问题吗?
答案 0 :(得分:3)
使用p:message的for属性,如下所示:
<p:dataTable value="#{someBean.items}" var="item">
<p:column>
<p:inputText id="someInputText1" validator="#{someBean.someValidator}" value="item.name">
<p:message id="someInputText1Msg" for="someInputText1" />
</p:column>
<p:column>
<p:inputText id="someInputText2" validator="#{someBean.someValidator}" value="item.model">
<p:message id="someInputText2Msg" for="someInputText2" />
</p:column>
</p:dataTable>
答案 1 :(得分:-1)
修改新FacesMessage的创建以使用component.getClientId()而不是“error:”。
那是:
if(someCondition) {
throw new ValidatorException(
new FacesMessage(FacesMessage.SEVERITY_ERROR, component.getClientId(), "validation failed"));
}