我正在使用
Omnifaces
<o:validateBean />
将JSR303 bean验证与类级约束一起使用。我的问题是基于之前的一个问题
how to attach message to specific components
。由于Omnifaces 2.6
showMessageFor
属性,完全解决了我当时的问题(多亏了Omnifaces库的开发人员;-)。我的问题是我不能让它工作。
这是我的设置。我有三个输入字段,其中两个在类级约束中耦合(weddingDay必须小于SilverWeddingAnyVersary;如果需要,我可以附加更多代码)。
@DayIsBeforeAnniversary
@Entity
public class Person implements Serializable
{
private String name;
@Temporal(TemporalType.DATE)
private Date weddingDay;
@Temporal(TemporalType.DATE)
private Date silverWeddingAnniversary;
...
}
<h:form id="main_form">
<p:messages />
<p:outputLabel value="Name" for="id_name" />
<p:message for="id_name" />
<p:inputText id="id_name" value="#{personController.person.name}" /><br />
<p:outputLabel value="Wedding Day" for="id_wedding" />
<p:message for="id_wedding" />
<p:calendar id="id_wedding" value="#{personController.person.weddingDay}" /><br />
<p:outputLabel value="Silver Wedding Anniversary" for="id_anniversary" />
<p:message for="id_anniversary" />
<p:calendar id="id_anniversary" value="#{personController.person.silverWeddingAnniversary}" /><br/>
<p:commandButton
value="test"
action="#{personController.navigate()}"
update="@all"/>
<o:validateBean
value="#{personController.person}"
showMessageFor="id_wedding id_anniversary" />
</h:form>
因此,我的目的是在
<p:message/>
对应于两个的标签
<p:calendar/>
我指定ID的标记(
showMessageFor="id_wedding id_anniversary"
)。
实际结果略有不同。“常规”中显示两条消息
<p:messages/>
标签并且所有输入字段都以红色突出显示(即使是名称的输入;每个输入和标签都有class=“ui状态错误”)。实际上,当我完全省略showMessageFor属性时,没有太大区别(除了在
<p: 消息/>
)。
那么,我各自做错了什么呢?我怎样才能告诉错误消息出现在两个特定的
<p: 消息/>
标签以及如何防止未涉及名称的输入字段变为红色?
(在Glassfish 4.1.1上使用Omnifaces 2.6.8)