JSF Zugriff auf mehrere Formulareinträge in einem Validator

Hallo Leute,

ich brauche einen Validator der vier Formulareinträge zugreift, um ermitteln, ob sich diese unterschieden. Es soll zu einer Frage eine richtige und drei alternative Antworten gegeben werden.
Diese Antworten sollen sich natürlich von einander unterscheiden.
Mein Ansatz sieht so aus:

Java:
@Override
    public void validate(FacesContext context, UIComponent currentComponent, Object value)
            throws ValidatorException {
        
        if(value == null | value == "")
            return;
        
        UIViewRoot view = FacesContext.getCurrentInstance().getViewRoot();
        HtmlInputText answerComponent = (HtmlInputText) view.findComponent("myForm:answer");
        HtmlInputText aa1Component = (HtmlInputText) view.findComponent("myForm:aa1");
        HtmlInputText aa2Component = (HtmlInputText) view.findComponent("myForm:aa2");
        HtmlInputText aa3Component = (HtmlInputText) view.findComponent("myForm:aa3");
        String answer = (String)answerComponent.getSubmittedValue();
        String aa1 = (String)aa1Component.getSubmittedValue();
        String aa2 = (String)aa2Component.getSubmittedValue();
        String aa3 = (String)aa3Component.getSubmittedValue();

        if(currentComponent == answerComponent) {
               // validate answer
        }
        else if(currentComponent == aa1Component) {
               // validate alternativeAnswer1
        }
        
        ...
}

Das Problem ist nur, dass ich diesen Validator vier mal durchlaufe.
Die Methode getSubmittedValue() liefert mir beim...
... ersten Mal alle vier Werte.
... zweiten Mal die drei letzten Werte.
... dritten Mal die letzten zwei Werte.
... beim vierten Mal nur noch den letzten Wert, sprich aa3.

Ansonsten liefert die Methode den Wert null.

Woran liegt das bzw. muss ich einen anderen Ansatz wählen?
 
Es gäbe natürlich noch die Möglichkeit den Validator nur bei einem Attribut anzugeben, aber diese Möglichkeit wäre denk ich die schlechteste aller Möglichkeiten.
 
S

Sym

Gast
Wenn Du es richtig machen möchtest, solltest Du Dir eine Komponente bauen. :)

Andernfalls würde ich in diesem Fall empfehlen, in der Action zu validieren und dort ggf. eine ValidationException werfen.

In einem Validator über den Context auf mehrere Felder zuzugreifen ist sehr unschön und eh nicht wiederverwendbar.
 
Ich hatte bereits eine Lösung über die Action.
Dies fand ich aber auch nicht so schön, weil ich im QuestionHandler dann Methoden zum Validieren beherberge.
 
S

Sym

Gast
Ich hatte bereits eine Lösung über die Action.
Dies fand ich aber auch nicht so schön, weil ich im QuestionHandler dann Methoden zum Validieren beherberge.
Ja, da hast Du sicherlich recht, allerdings ist das, was Du möchtest, allgemein schon unschön. Dann musst Du Dir halt eine Komponente schreiben. :)

Über den Validator finde ich das besonders unschön, gerade weil sich IDs auch mal ändern könnten und Du so keine Sicherheit hast, dass die Werte auch vorliegen.
 
Ich danke dir erst einmal. Werde es jetzt erst einmal über Action belassen, denn es ist im Moment richtiger, das es funktioniert. Werde es vielleicht bei einer Refactorisierung irgendwann mal ändern.
 

mjustin

Aktives Mitglied
Wenn es JSF 2 ist könnten dann Validation Groups verwendet werden?

So wie es hier und hier beschrieben wird ist es eventuell das gesuchte Feature. Es kann im Facelet oder im Java Quelltext (über Annotations) mit groups gearbeitet werden.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
W JSF Probleme mit Zugriff zur Managed Bean Web Tier 11
R JSF Zugriff für Helpdesk-Mitarbeiter Web Tier 15
K Converter + Zugriff auf DAO und EntityManager Web Tier 7
O JSF Zugriff auf entfernte Dateien Web Tier 11
S [JSF] Zugriff auf Bean (Eclispe,JBoss) Web Tier 12
J Servlet Zugriff Servlet Web Tier 11
H JSF Fehler bei Zugriff auf f:attribute Web Tier 2
R Zugriff Validator in Tabelle (ui:repeat) auf andere Felder Web Tier 2
A JSF xhtml parameter / zugriff auf value Web Tier 2
R Zugriff auf Session direkt auf JSF-Seite Web Tier 2
R Zugriff auf geschützten Bereich ohne Authentifizierung Web Tier 10
M JSF Kein Zugriff auf ManagedBeans, nach JSF Migration von 1.2 nach 2.0 Web Tier 4
K Struts request Zugriff Web Tier 4
S Lesender Zugriff auf Datei im Webprojekt Web Tier 2
D Servlets vor direktem Zugriff schützen Web Tier 2
M Zugriff aus eigenen Tags auf Struts Value Stack Web Tier 2
S Problem mit Servlet und Zugriff auf Orace XE Datenbank Web Tier 2
J JSP -> DB Zugriff? Web Tier 4
M JSF Designfrage bzgl. DB-Zugriff Web Tier 9
E Java Servlet doPost request, Mehrere Parameter mit demselben Namen aus Tabellenzeilen Web Tier 2
snatkoeln Mehrere Dyn. Web Projekte im gleichem Context Root Web Tier 0
FINF_AW_Alex Mehrere "selectOne" persistieren Web Tier 9
W Servlet SPEICHERN UNTER-Dialog für mehrere Dateien Web Tier 4
J mehrere browser-tabs gleichzeitig Web Tier 11
C jstl: collection property auf mehrere seiten Web Tier 2
K jquery.get() mehrere Parameter Web Tier 2
S JSF Templateproblem: Ein Template mehrere Clients Web Tier 2
M [JSF] Mehrere Nachrichten zusammenfassen. Web Tier 2
M JSF 2 / Mehrere Validatoren Web Tier 4
P Struts2 - Mehrere Methoden/Actions in einer Klasse + Validation Web Tier 2
M Tomcat - Mehrere Verzeichnisse für die jsp Web Tier 12
R Mehrere Webservices gleichzeitig abrufen Web Tier 2
pusteblume Mehrere Objekte einer Bean Web Tier 10
S Mehrere Styleklassen für Tabellenreihen Web Tier 4

Ähnliche Java Themen

Neue Themen


Oben