JSF中使用primefaces的条件验证

JSF中使用primefaces的条件验证,jsf,jsf-2,primefaces,Jsf,Jsf 2,Primefaces,我在JSF中有两个实体是下拉列表。如果我选择月份,那么我应该强制选择年份。如果我没有选择年份而只选择月份,则单击“提交”按钮时会出现验证错误。这种形式的条件验证在primefaces中是否可行。我尝试过javascript方法,但不知怎么地失败了。如何使用primefaces实现它。? 下面是我的两个实体 <p:outputLabel for="year" value="Year: " /> <p:selectOneMenu id="year" sty

我在JSF中有两个实体是下拉列表。如果我选择月份,那么我应该强制选择年份。如果我没有选择年份而只选择月份,则单击“提交”按钮时会出现验证错误。这种形式的条件验证在primefaces中是否可行。我尝试过javascript方法,但不知怎么地失败了。如何使用primefaces实现它。? 下面是我的两个实体

<p:outputLabel for="year" value="Year: " /> 
            <p:selectOneMenu id="year" style="width:150px   " value="#{bean.year}">
            <f:selectItem itemLabel="All" itemValue="All"/>
            <f:selectItem itemLabel="2014" itemValue="2014"/>
            <f:selectItem itemLabel="2013" itemValue="2013"/>
            <f:selectItem itemLabel="2012" itemValue="2012"/>
            <f:selectItem itemLabel="2011" itemValue="2011"/>
            <f:selectItem itemLabel="2010" itemValue="2010"/>
            <f:selectItem itemLabel="2009" itemValue="2009"/>
        </p:selectOneMenu>

            <p:outputLabel for="month" value="Month: " />                   
            <p:selectOneMenu id="month" style="width:150px" value="#{bean.month}">
            <f:selectItem itemLabel="All" itemValue="All"/>
            <f:selectItem itemLabel="January" itemValue="01"/>
            <f:selectItem itemLabel="February" itemValue="02"/>
            <f:selectItem itemLabel="March" itemValue="03"/>
            <f:selectItem itemLabel="April" itemValue="04"/>
            <f:selectItem itemLabel="May" itemValue="05"/>
            <f:selectItem itemLabel="June" itemValue="06"/>
                <f:selectItem itemLabel="July" itemValue="07"/>
            <f:selectItem itemLabel="August" itemValue="08"/>
            <f:selectItem itemLabel="September" itemValue="09"/>
            <f:selectItem itemLabel="October" itemValue="10"/>
            <f:selectItem itemLabel="November" itemValue="11"/>
            <f:selectItem itemLabel="December" itemValue="12"/>
        </p:selectOneMenu>

将属性required=“true”添加到您选择的年度菜单中

    <p:selectOneMenu id="year" style="width:150px" required="true" value="#{bean.year}">
           <!-- some code here -->
   </p:selectOneMenu>
   <p:message for="year" display="icon" />


请注意,标记消息用于显示错误发生的位置。对于每月的selectOneMenu,请执行相同的操作。

我认为此简单解决方案适用于您的情况,如果您想使用自定义验证器,您必须遵循以下步骤:

  • 通过实现
    javax.faces.validator.validator
    接口

  • 重写
    validate()
    方法

  • 通过
    @FacesValidator
    注释分配唯一的验证器ID

  • 通过f:validator将自定义验证器类引用到JSF组件 标签


  • 您可以在JSF2.0中查看更多信息自定义验证器我需要一个自定义验证,如果我选择了月份而不是年份,那么应该执行验证。