我在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>
答案 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)
我认为这个简单的解决方案适用于您的情况,如果您想使用自定义验证器,则必须遵循以下步骤:
通过实现创建验证器类
javax.faces.validator.Validator
界面。
覆盖validate()
方法。
通过@FacesValidator
注释分配唯一的验证码ID。
通过f:validator将自定义验证器类引用到JSF组件 标签
您可以前往here获取更多信息JSF 2.0中的自定义验证器