JSF - Eigene Komponente validieren

xeal

Mitglied
Hallo allerseits,

bin gerade dabei meine eigene Komponente mit JSF zu schreiben. Bislang hab ich ein Eingabefeld erstellt mit ein paar Extras. Soweit alles klar. Nun steh ich vor dem Problem das ich dem Eingabefeld einen Validator zuweisen möchte. Mein Problem liegt darin das ich nicht weiß wie ich den Validatorstaus an der Komponente überprüfen kann bzw. ich weiß nicht ob die Daten im dem Feld korrekt sind. Nach der fehlgeschlagenen Validierung soll das Eingabefeld neu gerendert werden.

Hier meine Field Klasse

Code:
import javax.faces.component.UIInput;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.el.MethodBinding;
import javax.faces.validator.Validator;

public class Field extends UIInput{

    private String label;
    private Validator validator;
    
    private static final String COMPONENT_RENDERER = "test.FieldRenderer";
    private static final String COMPONENT_FAMILY = "test.input";
    
    public Field(){
        this.setRendererType(COMPONENT_RENDERER);
    }
    
    public String getLabel() {
        return label;
    }

    public void setLabel(String label) {
        this.label = label;
    }
    
    @Override
    public Object saveState(FacesContext facesContext){
        Object values[] = new Object[2];
        values[0] = super.saveState(facesContext);
        values[1] = label;
        return values;
    }
    
    @Override
    public void restoreState(FacesContext facesContext, Object state){
        Object values[] = (Object[])state;
        super.restoreState(facesContext,values[0]);
        label = values[1].toString();
    }

    @Override
    public String getFamily(){
        return COMPONENT_FAMILY;
    }

    @Override
    public boolean isValid() {

        return super.isValid();
    }
    
    @Override
    public Converter getConverter() {
        // TODO Auto-generated method stub
        return super.getConverter();
    }
    
    @Override
    public MethodBinding getValidator() {
        // TODO Auto-generated method stub
        return (MethodBinding) validator;
    }
    
    @Override
    public void addValidator(Validator validator) {
        this.validator = validator;
    }
}

Wenn ich das Ganze im Debug Modus laufen lasse sehe ich das die Varibale validator eine Validator-Instanz bekommt. Es werden jedoch keine FacesMessages ausgeben was aber eigentlich passieren sollte wenn ein Fehler auftritt.

Irgendwie muss ich doch noch den Validator an die Komponente koppeln oder nicht?

Hier dazu meine JSP Seite
Code:
...
<f:view>
<h:form id="myForm">
            
<rs:field id="field_ID" required="true" value="" label="LABEL:" errorStyleClass="test">
    <f:validateDoubleRange minimum="2" maximum="10"></f:validateDoubleRange>
</rs:field>
            
<h:messages></h:messages>
                       
 <h:commandButton value="Senden" action="#"></h:commandButton>
           
</h:form>
</f:view>
....

Ich hoffe Ihr habt einen Tipp für mich wie ich weiter kommen kann.

Gruß Xeal
 

Neue Beiträge

Zurück