Wie lässt sich die Validierung von der gedrückten Taste abhängig machen?
Ich habe Formular erstellt und ich möchte, um zu zeigen, bisherigen vorhandenen Gegenstände auf einem Tisch, während eine neue erstellen. Ich möchte zeigen übereinstimmende Elemente als form füllt. Aber wenn ich versuche, um die Liste zu filtern, ohne das Formular ausgefüllt, die Validierung von Nachrichten angezeigt werden und die Tabelle nicht aktualisiert.
Weiß nicht, ob es möglich ist, aber was will ich tun so etwas wie dieses:
<h:form id="form">
<h:outputText value="Name: "/>
<p:inputText value="#{itemsBean.name}" id="name" required="true"/>
<br/>
<h:outputText value="Description: "/>
<p:inputText value="#{itemsBean.description}" id="description" required="true"/>
<p:commandButton value="Save" update="form" actionListener="#{itemsBean.save}"/> //validate and save
<p:commandButton value="Filter" update="form" actionListener="#{itemsBean.updateItemsList}"/> //don't validate, and update the table.
<p:dataTable id="list" value="#{itemsBean.itemsList}" var="item">
<p:column>
<h:outputText value="#{item.name}"/>
</p:column>
<p:column>
<h:outputText value="#{item.description}"/>
</p:column>
</p:dataTable>
</h:form>
Ich bin sehr neu in JSF.
InformationsquelleAutor der Frage Roteke | 2011-12-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich verstehe, dass Sie wollen, zu filtern, basierend auf der
name
Eingabefeld. Die<p:commandButton>
sendet standardmäßig eine ajax-Anfrage und hat eineprocess
Attribut, wobei Sie angeben können, welche Komponenten Sie möchten, um zu verarbeiten, während die reichen. In Ihrem Fall sollten Sie dann Prozess nur diename
Eingabefeld und die Strom-Taste (so dass Ihre Aktion aufgerufen wird).Den
process
Attribut kann eine durch Leerzeichen getrennte Sammlung von (relativ) client-IDs der Komponenten, wobei@this
bezieht sich auf die aktuelle Komponente. Verzug im Falle des<p:commandButton>
zu@form
(bezieht sich auf alle input-Felder des aktuellen Formulars und die der gedrückten Taste), das ist, warum Sie wurden alle überprüft worden sind, die in Ihrem ersten Versuch. Im obigen Beispiel alle anderen Eingabe-Felder werden nicht verarbeitet (und somit auch nicht validiert).Wenn Sie jedoch beabsichtigen, überspringen Sie die
required
Validierung für alle Felder, wenn der Taster in Frage gedrückt wurde, so dass Sie schließlich Prozess mehrere Felder, die nicht zwingend sein müssen alle ausgefüllt, dann müssen Sie dierequired="true"
eine bedingte statt, die überprüft, ob der button gedrückt wurde oder nicht. Zum Beispiel, lassen Sie es bewertentrue
nur, wenn der save-button gedrückt wurde:Diese Weise nicht überprüft werden, da
required="true"
wenn eine andere Taste gedrückt wird. Der trick in dem Beispiel oben ist, dass der name der gedrückten Taste (das ist im wesentlichen die client-ID) gesendet wurden als request-parameter und das könnte man nur überprüfen Sie Ihre Präsenz in der request-parameter-map.Siehe auch:
InformationsquelleAutor der Antwort BalusC
Zusätzlich zu den BalusC Antwort (sehr nützlich und ausfüllen) ich möchte hinzufügen, dass, wenn Sie eine
<h:commandButton />
es wird validiert (erforderlich, benutzerdefinierte Validierungen) alle Felder in der<h:form />
wo die Befehl-Taste befindet sich, deshalb, wenn Sie brauchen, um mehr als eine Befehlsschaltfläche, die Sie in Betracht ziehen könnte, dass es eine gute Praxis die Verwendung unterschiedlicher<h:form />
auf verschiedene Zuständigkeiten zu vermeiden, unerwartetes Verhalten in submit-Aktionen der Schaltflächen.Es ist gut erklärt in einem BalusC Antwort: Mehrere h:form in einer JSF-Seite
Wenn Ihr Formular Validierungen und Sie nicht aktualisieren Sie die
<h:form />
oder Sie zeigen nicht die Nachrichten, Sie könnten Kopfschmerzen bekommen denken, dass die<h:commandButton />
ist nicht brennen Sie Ihre Aktion, aber wahrscheinlich ist eine Validierung problem, das nicht gezeigt worden ist.InformationsquelleAutor der Antwort Cristian David Arteaga Sanchez
Habe ich getestet, mit nicht-ajax übermittelt:
Die erste Eingabe ist erforderlich, validiert nur auf Save1 Schaltfläche senden.
InformationsquelleAutor der Antwort mnesarco
Ändern Sie Ihre filter commandbutton, wie diese zu ignorieren Validierung:
EDIT:
Den zugehörigen post auf ALSO, ich denke, das wird die Lösung für Ihr Problem zu
JSF 2.0: Wie überspringen von JSR-303 bean-Validierung?
InformationsquelleAutor der Antwort mprabhat