2017-10-09 80 views
1

我有问题小时,以验证多个组件:形式......我需要验证这两个inputText的成分,但如果我不喜欢这样写道:primefaces形成多个验证

<p:inputText id="actionNameInput" 
       title="TO DO" 
       value="#{repositoryBean.newActionName}" 
       label="Action name" 
       required="true" 
       requiredMessage="Action name is missing."> 
     <f:validator validatorId="inputTextValidator"/> 
     <f:attribute name="input1" value="Action name" /> 
    </p:inputText> 

    <p:inputText id="identifierInput" 
       title="TO DO" 
       value="#{repositoryBean.newActionRegex}" 
       label="Identifier" 
       required="true" 
       requiredMessage="Identifier is missing."> 
     <f:validator validatorId="inputTextValidator"/> 
     <f:attribute name="input1" value="Identifier" /> 
    </p:inputText> 

这里是验证器类:

@FacesValidator(value = "inputTextValidator") 

public class AddActionValidatorInputText implements Validator{ 
    @Override 
    public void validate(FacesContext facesContext, UIComponent uiComponent, Object o) throws ValidatorException { 

     if(((String)o).length() < 3){ 
      FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, 
        uiComponent.getAttributes().get("input1")+" should be longer than 3characters.", null); 
      FacesContext.getCurrentInstance().addMessage(null, message); 
      throw new ValidatorException(message); 
     } 
    } 
} 

只会验证第一inputText的...我tryied this,但我不能得到成分值(总是空)......我读smthing约缝的面孔,但如果我申请了,有一些更大的错误(比如它需要越来越多的依赖...)。我不想在我的bean类中验证它。

+0

它是否适用于'h:inputText'? – Kukeltje

回答

0

Here你可以找到问题的可能解决方案。而为了让值不为空,使用valueChangeListener属性是这样的:

<p:inputText id="actionNameInput" 
      title="TO DO" 
      value="#{repositoryBean.newActionName}" 
      label="Action name" 
      required="true" 
      requiredMessage="Action name is missing." 
      valueChangeListener="#{repositoryBean.onNewActionNameChange}"> 
    <f:validator validatorId="inputTextValidator"/> 
    <f:attribute name="input1" value="Action name" /> 
</p:inputText> 

和支持bean:

public void onNewActionNameChange(ValueChangeEvent event) { 
    setNewActionName(event.getNewValue().toString()); 
} 

This article关于JSF生命周期可以帮助你了解里面是什么回事。