使用JSF中的primefaces进行条件验证

时间:2014-08-06 09:48:34

标签: jsf jsf-2 primefaces

我在JSF中有两个下拉列表实体。如果我选择月份,那么我应该强制选择年份。如果我没有选择年份而且只选择了月份,那么点击提交按钮时会出现验证错误。这种形式的条件验证是否可用于主要表面。我曾尝试过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>

2 个答案:

答案 0 :(得分:1)

将属性 required =&#34; true&#34; 添加到您年度的selectOneMenu

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

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

答案 1 :(得分:1)

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

  1. 通过实现创建验证器类 javax.faces.validator.Validator界面。

  2. 覆盖validate()方法。

  3. 通过@FacesValidator注释分配唯一的验证码ID。

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

  5. 您可以前往here获取更多信息JSF 2.0中的自定义验证器