如何设置primefaces selectCheckboxMenu验证器以进行最小选择

Jal*_*rdo 0 validation jsf primefaces jsf-2

我想写一个验证器,primefaces selectCheckboxMenu以防止用户选择少于5个值.

我试图实现BalusC RequiredCheckboxValidator,但无法知道如何访问所选值的大小,有人能把我放在正确的路径上吗?

Hat*_*mam 5

你会这样做的.

XHTML

<p:selectCheckboxMenu value="#{mainBean.selectedList}" >  
    <f:selectItems value="#{mainBean.map}" />  
    <f:validator validatorId="limitCheckboxMenuValidator" />                       
    <f:attribute name="minLimit" value="5" />
</p:selectCheckboxMenu>  
Run Code Online (Sandbox Code Playgroud)

验证器

@FacesValidator("limitCheckboxMenuValidator")
public class LimitCheckboxMenuValidator implements Validator {

   public LimitCheckboxMenuValidator() {

   }

   @Override
   public void validate(FacesContext context, UIComponent component,
           Object value) throws ValidatorException { 
       //get limit
       Integer minLimit =    Integer.parseInt((String)component.getAttributes().get("minLimit"));
       SelectCheckboxMenu myComponent = (SelectCheckboxMenu)component;

       if (((String[])myComponent.getSubmittedValue()).length < minLimit) {
           FacesMessage msg
                   = new FacesMessage("Limit failed",
                           "Min selection must be " + minLimit);
           msg.setSeverity(FacesMessage.SEVERITY_ERROR);
           throw new ValidatorException(msg);
       } 
   }
}
Run Code Online (Sandbox Code Playgroud)

一个小的工作示例可以在github [ 1 ] [ 2 ]和在线演示中找到.

希望这可以帮助.