Primefaces abhängig selectOneMenu und required="true"
In meiner Anwendung habe ich drei dropdown-Menü (p:selectOneMenu
), sagen wir A, B, C. Unter Ihnen zwei angewiesen sind, sagen wir B und C Durch die änderung wird der Wert von B ich bin dynamisch laden Werte auf C. Außerdem gibt es eine textbox. Der Wert der textbox wird die Erzeugung von ajax, wenn das change-Ereignis wird ausgelöst von diesen drei dropdowns.
Hier ist das xhtml:
<p:selectOneMenu id="customerMenu" value="#{adminController.activityDTO.customerId}" required="true" label="Customer Name" style="width: 200px">
<f:selectItem itemLabel="Select One" itemValue="" />
<f:selectItems value="#{adminController.customers}" var="customer" itemLabel="#{customer.customerName}" itemValue="#{customer.customerId}" />
<p:ajax listener="#{adminController.generateActivityName}" update="activityId" />
</p:selectOneMenu>
<p:selectOneMenu id="activityTypeMenu" value="#{adminController.activityDTO.activityParentType}" required="true" label="Activity Type"
style="width: 200px">
<f:selectItem itemLabel="Select One" itemValue="" />
<f:selectItems value="#{adminController.activityTypes}" var="activityType" itemLabel="#{activityType.parent}" itemValue="#{activityType.parent}" />
<p:ajax listener="#{adminController.updateDependentActivity}" update="activitySubType" />
</p:selectOneMenu>
<p:selectOneMenu id="activitySubTypeMenu" value="#{adminController.activityDTO.activitySubType}" required="true" label="Activity Sub Type"
style="width: 200px">
<f:selectItem itemLabel="Select One" itemValue="" />
<f:selectItems value="#{adminController.activitySubTypes}" var="activityType" itemLabel="#{activityType.name}" itemValue="#{activityType.id}" />
<p:ajax listener="#{adminController.generateActivityId}" update="activityId" />
</p:selectOneMenu>
<p:inputText id="activityId" autocomplete="off" readonly="true" value="#{adminController.activityDTO.activityId}"
label="#{adbBundle['admin.addActivityPanel.addActivityTable.activityId']}" required="true" />
Den activityTypeMenu
und activitySubTypeMenu
sind abhängig vom gewählten Wert des activityTypeMenu
ich bin bevölkern die activitySubTypeMenu
.
Nun die Probleme, ich bin vor ist:
- Sagen, ich habe wählen Sie "Externen" und "Internen" in
activityTypeMenu
und Standard "Wählen Sie Eine". Wenn ich wählen Sie "Extern" ausactivityTypeMenu
dieactivitySubTypeMenu
haben, "Projekt" und "Service". Aber dann, wenn ich wählen Sie die Voreinstellung "Wählen Sie" dieactivitySubTypeMenu
hält immer noch die zuvor dynamisch aufgefüllt Werte. Dies ist, weil dierequired="true"
Attribut Widerstand gegen Feuer backend-Methode, von denen ich bin laden der dynamische Wert. - Ich habe versucht, die
itemValue
von<f:selectItem itemLabel="Select One" itemValue="" />
zu#{null}
und dann die backend-Methode reagiert auf das auswählen der "Select-one" - option und ich kann eine leere Liste zuactivitySubTypes
und auf diese Weise dieactivitySubTypeMenu
bekommen leer. In diesem Fall ist aber dierequired="true"
ist immer sinnlos. Ich meine, ich habe auch Schaltfläche speichern und auf Klick auf die Schaltfläche ohne Auswahl einer option (das ist die Auswahl "Select-one") ausactivityTypeMenu
undactivitySubTypeMenu
nicht werfenValidatorException
und die Komponenten sind nicht immer gestylt durch die Fehler die css-Klasse Primefaces. - Auch wenn ich nicht die
itemValue
von<f:selectItem itemLabel="Select One" itemValue="" />
zu#{null}
dann auf ändern, um ausgewählten Wert zu Standard-option("Select-one") nicht, Entrümpelung deractivityId
p:inputText
. Wenn ich#{null}
dann bekomme ich die backend-Methode Schießen aus der ich den Wert der textbox zu leeren.
Wie ca ich lösen diese Probleme und erhalten gewünschten Ergebnis. Was ich will sind:
- Wenn die option auf "Wählen Sie eine" und dann die abhängigen Menü leer und der textbox.
- Ich will das
required="true"
Attribut.
- Haben Sie versucht, mit
process="@this"
Attribut inp:ajax
- tags? , Die verhindert, dass die Validierung anderer form-Komponenten, denn nur die Komponente, die Sie ändern, werden von der JSF-lifecycle. Wenn nicht funktioniert, ist die einfachste (aber nicht beste) Weg, um es Arbeit wäre, loszuwerdenrequired="true"
Attribute und überprüfen das ganze Formular vollständig aus, wenn es gesendet wird. Viel Glück. - Aber ich denke schon
p:ajax
standardmäßig@this
. - ja die
p:ajax
Standardwert ist@this
- Versuchen, die
noSelectionOption="true"
Flagge auf Ihrem<f:selectItem/>
. Es ist ein reserviertes flag, das bewirkt, dass die Laufzeit für die Bewertung Ihrer Auswahl anders. - nach code.google.com/p/primefaces/issues/detail?id=4582 es hat bug mit
noSelectionOption
.
InformationsquelleAutor Tapas Bose | 2013-01-26
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie EL in die
required
Attribut. Sie können den gewünschten Ausdruck bewertentrue
nur, wenn eine bestimmte submit-button gedrückt wird, oder wenn eine bestimmte Komponente Wert ist eingereicht (und damit durch seine client-ID vorhanden im parameter "request" anzeigen#{param}
).Den folgenden kickoff Beispiel sollte das tun, was Sie brauchen.
Diese Weise, das 1. Menü ist nur erforderlich, wenn das Formular die wichtigsten submit-button gedrückt wurde (und somit nicht als Ereignis-Listener ausgelöst werden) und das 2. Menü ist nur erforderlich, wenn das 1. Menü hat einen Wert.