Wie lassen Sie die Validierung hängt von der gedrückten Taste?
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.
"wan ' T"........
InformationsquelleAutor 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:
save
element sollte kam? es ist eine Bohne? undclientId
einen parameter? Wie ich schon sagte, ich bin sehr neu in Java und JSF, und ich studiere viel. Aber ich weiß nicht, ob ich bitte etwas zu basic. Ich danke Ihnen sehr für die Zeit nehmen, zu Antworten.Nein, das Beispiel ist wie Sie ist. Die
#{save}
gebunden ist an die Ansicht. DieclientId
ist eben Ihre Eigenschaft. Siehe auch docs.oracle.com/javaee/6/api/javax/faces/component/.... Es ist nicht notwendig, binden es an eine bean-Eigenschaft, es sei denn, Sie möchten, Bearbeiten Sie die Komponente aus dem inneren der Bohne. Aber wenn Sie nicht muss, dann gibt es keine Notwendigkeit zu haben, eine ungenutzte Eigenschaft in der bean. Siehe auch stackoverflow.com/questions/8168302/...Wow es gab viele Dinge, die ich nicht kannte, die hinter diesem... vielen Dank für Ihre Antwort, es zeigte mir nur, was ich zu wissen brauchte.
Funktioniert diese Lösung funktioniert bei komplexeren Prüfungen, zum Beispiel
f:validateLength
? Könnte es sein, angewendet ein paar mal während der Zeit, die der Seite Leben?Warum nicht wir verwenden klassische immediate-Attribut mit PrimeFaces als wir gewohnt sind?
InformationsquelleAutor BalusC
Habe ich getestet, mit nicht-ajax übermittelt:
Die erste Eingabe ist erforderlich, validiert nur auf Save1 Schaltfläche senden.
InformationsquelleAutor mnesarco
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 Cristian Arteaga
Ä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 mprabhat