JSF中自定义组件的验证器失败

时间:2013-05-03 05:33:03

标签: jsf-2 composite-component

在我的自定义组件中,我有

<composite:interface>
    <composite:editableValueHolder name="val_pwd" targets="form:pwd"/>
    <composite:attribute name="name" required="true"/>
    .....
</composite:interface>
<composite:implementation>
    <h:form id="form">
        <h:panelGrid columns="3">
            <h:outputText value="#{cc.attrs.namePrompt}" />
            <h:inputText value="#{cc.attrs.name}" id="name"/>
            <h:outputText value="#{cc.attrs.passwordPrompt}" />
            <h:inputSecret value="#{cc.attrs.pwd}" id="pwd"/>
            <h:commandButton value="#{cc.attrs.submitButtonValue}" action="#{cc.attrs.actionMethod}"/>
        </h:panelGrid>
    </h:form>
</composite:implementation>

我有一个验证器,

@FacesValidator("passwordVal")
public class PasswordValidator implements Validator {
public PasswordValidator() {
    super();
}


@Override
public void validate(FacesContext facesContext, UIComponent uIComponent, Object object) throws ValidatorException {
    if(object instanceof String){
        String s = (String) object;
        if(s.contains("@"))
            throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error","Password cannot have @"));
    }
}
}

在我的JSF页面中,我有

<h:body>      
    <util:ccwithcustomval namePrompt="r_Name" passwordPrompt="r_pwd" name="#{person.name}" 
     pwd="#{person.pwd}" actionMethod="#{person.action}" submitButtonValue="r_submit">    
        <f:validateLength for="val_name" maximum="5"/>
        <f:validator validatorId="passwordVal" for="val_pwd" />
     </util:ccwithcustomval>
  </h:body>

但是,它失败并出现异常

InputComponent.xhtml @12,60 <f:validator> ADF_FACES-60085:Parent not an instance of
 EditableValueHolder: javax.faces.component.UINamingContainer@4e18afaa

问题出在我的验证器上,如果我将其评论显示在页面上

0 个答案:

没有答案