代码之家  ›  专栏  ›  技术社区  ›  Filou

Omnifaces validateBean:无法获取ShowMessage以使AtterBute正常工作

  •  1
  • Filou  · 技术社区  · 7 年前

    我正在使用 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: 消息/> )。

    Result

    那么,我各自做错了什么呢?我怎样才能告诉错误消息出现在两个特定的 <p: 消息/> 标签以及如何防止未涉及名称的输入字段变为红色?

    (在Glassfish 4.1.1上使用Omnifaces 2.6.8)

    1 回复  |  直到 7 年前
        1
  •  1
  •   BalusC    7 年前

    问题有两个方面。

    1. 这个 showMessageFor 属性无意中将客户端ID解释为完整的客户端ID。以下方法适用于您。

      <o:validateBean 
          value="#{personController.person}" 
          showMessageFor="main_form:id_wedding main_form:id_anniversary" />
      
    2. 这个 showMessageFor 不用于仅将特定输入字段标记为无效。不幸的是,除了抓取,没有其他解决方法 <o:validateOrder> 相反

      <o:validateOrder
          components="id_wedding id_anniversary"
          message="You cannot celebrate wedding anniversary before being married"
          showMessageFor="@all" />
      

    2.6.9中根据 issue 446