Validating a component

How can I switch my validator to the dependence of the component on the logical.

I have selectBooleanCheckbox, and when its true, I want to use FirstValidator yet, I want to use SecondValidator. I did not find anything about this "special" case.

Nothing special, like code:

Xhtml:

<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html">
<h:head>

</h:head>

<h:body>
<h:form>
    <h:selectBooleanCheckbox value="#{testBean.firstValidator}"/>
    <h:inputText>
        <f:validator validatorId="FirstValidator" />
    </h:inputText>
    <h:commandButton value="Test" />
    <h:messages />
</h:form>

</h:body>
</html>

Bean:

@ManagedBean
@ViewScoped
public class TestBean implements Serializable{
private boolean firstValidator;

public boolean isfirstValidator() {
    return firstValidator;
}

public void setfirstValidator(boolean firstValidator) {
    this.firstValidator = firstValidator;
}
}

Validator1:

@FacesValidator("FirstValidator")
public class FirstValidator implements Validator{

@Override
public void validate(FacesContext context, UIComponent component,
        Object value) throws ValidatorException {
    String valueAsString = (String) value;
    if(valueAsString.contains("a")){
        throw new ValidatorException(new FacesMessage("Fail!"));
    }
}
}

Validator2:

@FacesValidator("SecondValidator")
public class SecondValidator implements Validator{

@Override
public void validate(FacesContext context, UIComponent component,
        Object value) throws ValidatorException {
    String valueAsString = (String) value;
    if(valueAsString.contains("b")){
        throw new ValidatorException(new FacesMessage("Fail2!"));
    }
}
}
+4
source share
1 answer

/ . , ( ). , #{testBean.firstValidator} ( ). HTTP-. , , .

( bean!) binding:

<h:selectBooleanCheckbox binding="#{checkbox}" ... />

, #{param[checkbox.clientId]}.

:

<f:validator validatorId="#{empty param[checkbox.clientId] ? 'firstValidator' : 'secondValidator'}" />

validator disabled:

<f:validator validatorId="firstValidator" disabled="#{not empty param[checkbox.clientId]}" />
<f:validator validatorId="secondValidator" disabled="#{empty param[checkbox.clientId]}" />

, Java. Java-, ?

Validator FirstValidator = new FirstValidator();
+4

All Articles