JSF form absenden ohne require validation (andere schon)

ArkLut

Aktives Mitglied
Hi!

Ich habe ein größeres Form auf einer JSF Seite, bei dem viele Komponenten verschiedene Validatoren haben.
Manche eingaben müssen auch ausgefüllt werden. Mittels require="true" oder dem <requireValidator >
Nun möchte ich einen (zusätzlichen) commandButton Nutzen der den Input verarbeitet dabei die Validatoren ausfürt aber eben ohne die require-Validatoren (egal ob über require="true" oder <requireValidator> eingebunden).

Gibt es bei JSF eine Möglichkeit das einfach zu machen?
Mir fällt dabei gar nichts ein ... nicht mal ein komplizierter weg.
Wäre für Ideen dankbar!
 

BuckRogers

Bekanntes Mitglied
Hi ArkLut,

um dieses Problem zu lösen verwendest du am besten Javascript und änderst das Attribut deiner Tags BEVOR der Request abgesendet wird. An welcher Stelle du die Attribute änderst bleibt dir überlassen. Das Attribut required=true und auch das Tag machen das Gleiche. Persönlich würde ich erst einmal alle Felder so ändern, dass ausschließlich das Attribut verwendet wird. Dieses kannst du dann bspw. parametriseren (muss man aber nicht) und dann via JS-Funktionen ändern.

Mal ein Pseudo Beispiel:

HTML:
<h:inputSecret id="password" value="#{user.password}"
                size="20" required="true"
                label="Password" />
<h:commandButton value="Submit" action="result" id="submitPasswd"/>

<!-- JS -->
Event.observe(window, "load", function () {
    $('submitPasswd').observe("click", function (e) {       
         <!-- ... Attribute hier ändern
          ... Form absenden -->
    });
});

Man muss sicherlich ein wenig herum probieren bis es funktioniert, das wäre meine Herangehensweise.
Ich weiß nicht ob sich das von hause aus mit JSF realisieren lässt. Ich glaube aber nicht.

Grüße
 

ArkLut

Aktives Mitglied
Danke, habe mich jetzt bischen weiter durch links gelesen.

@BuckRogers:
das sieht mir ziemlich Aufwendig/komplex aus :)
Und damit auch fehleranfällig :/

@stq:
sieht mir doch nach zwei verschiedenen Herangehensweisen aus.
1) Nutzt die Möglichkeit in der EL auf die Parameter von den requests zu zugreifen.
dazu wird empty param['<Component.ClientId vom sendenden commandButton>'] verwendet.
und das eben im require drinnen. eigentlich klar und einfah.

2) Eigener require-Validator + einen Check ob vom Absender ein Parameter mitgesendet wird.
Wirkt mir zuerst sehr nett, da ggf nett erweiterbar. Aber dann denke ich mir selbst gemachte sachen haben immer eine höhere Wahrscheinlichkeit zu nicht berücksichtigten Nebeneffekten.


Nach einiger weiterer Recherche habe ich mich für Version (1) entschieden da sie scheinbar auf Stack Overflow empfohlen.
Einziges Manko oder Problem: woher bekomme ich die Client ID des commandButtons ...
Man kann sie aus dem gerenderten HTML output auslesen ud dann einfügen. Klappt ist aber für die Wartung übel.
In den Beispielen fannd ich auch noch:
Code:
<p:inputText ... required="#{not empty param[save.clientId]}" />
<p:commandButton binding="#{save}" value="Save" ... />

.clientId ist ein Property, welches jedem componente hat (ab JSF2) aber mir ist nicht klar wie "save" die componente anspricht ... klaoppt das über dass binding?

aber auch das wäre blöd, da wenn die ich die input Komponenten verschiedenen xhmls zusammen baue und sie in mehreren views vorkommen, kann ich nicht mehr auf den "gebindeten" namen (save) gehen, da er dann im view ohne den button nicht zwingend drin ist und daher nicht gebaut werden kann ...
 

ArkLut

Aktives Mitglied
So wollte nur nochmal Bescheid geben:
Ursprünglich wollte ich mich auf (1) festlegen. Dies tue ich aber nur wen Input-Control und commadControl fix im selben file liegen, da es dann wartungstechnisch keine Probleme gibt und es einfach zu lesen ist.

Methode (2) also einen eigenen Validator mache ich wenn es skipable sein soll und die betroffenen componenten über mehrere files verteilt sind. command kann dann einfach einen param haben mit Name "SkipableValidator" der dann im validator gecheckt werden kann.
Als alternative dazu hätte ich noch die Möglichkeit direkt im require/requireValidator mittels #{not param.SkipableValidator}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
6 JSF Form Attribute nicht an Bean übergeben Web Tier 2
N JSF CommandButton Daten aus anderem Form auslesen Web Tier 3
S Primefaces commandButton in einem Dialog/Form/PanelGrid führt actionListener nicht aus Web Tier 4
L OpenFaces tabbedPane und h:form Web Tier 2
H [WICKET] clean form input trotz AjaxSubmitLink Web Tier 6
ruutaiokwu action-attribut des jsf h:form-tag überschreiben Web Tier 7
H <form:input > javascript Web Tier 2
L Struts JSTL Form Variable Übermitteln Web Tier 2
P FORM-AUTH - Logout Web Tier 4
N MessageResources von Struts in Form-Bean Web Tier 4
G JSF h:form Tag Login über j_security_check und weiterleiten Web Tier 5
S Facelets Form: Validation abschalten bei Abbrechen-Button Web Tier 2
T Daten aus der Form holen Web Tier 2
U JSP form-Daten (ohne name-Attribut) an Servlet = Problem Web Tier 6
H Java Servlet und HTML Form Web Tier 3
G in validate methode auf form objekte zugreifen Web Tier 3
platofan23 Java Login Überprüfung ohne Srciptlets in der JSP Web Tier 4
E Kann man ein Formular in JSP auch per Tastendruck ohne Javascript-Verwendung abschicken? Web Tier 2
T JSF Datenbankzugriff ohne Persistenzschicht Web Tier 3
H JSF JSF 2.0 (Primefaces) commandLinks mit action="mypage.xhtml" ohne die URL im Browser zu ändern Web Tier 8
M JSF Datatable, nichts geht ohne vorher zu refreshen... Web Tier 4
D Servlet JSP Umfrage ohne Formular Web Tier 2
J JSF AJAX-Aufruf ohne Komponente Web Tier 4
S [JSF] CommandButton/Link ohne Validierung Web Tier 3
JCODA Tomcat ohne Fenster starten Web Tier 5
R Zugriff auf geschützten Bereich ohne Authentifizierung Web Tier 10
G JSF 2x h:selectManyCheckbox ohne duplikate Auswahl/selectManyCheckbox und f:ajax Web Tier 3
ruutaiokwu template engine gesucht ohne abhängigkeit zum servlet container Web Tier 2
D Struts2 Combobox ohne Eingabefeld Web Tier 2
G Framework ohne JSP? Web Tier 10
D Ajax und Validation ohne große Umstrukturierung Web Tier 3
T Tomcat Projekt ohne Eclipse starten Web Tier 11
D Wicket mit Spring ohne extra Proxies Web Tier 4
D MultiActionController von Spring ohne action und / aufrufen Web Tier 3
G pdf direkt darstellen ohne downloadfenster Web Tier 4

Ähnliche Java Themen

Neue Themen


Oben