h:selectBooleanCheckbox nicht immer gesetzt, mit den richtigen Wert
Versionen :
Aapche MyFaces 2.1.14
RichFaces 4.3.5
Problem :
Ich bin mit sehr seltsamen Problem für JSF2.1
Wie gezeigt in code-snippet am Ende , boolean-Kontrollkästchen ist deaktiviert, basierend auf booleschen variable #{bean.disabled}.
Die Frage ist unten :
1)Erste #{bean.disabled}
zu false ausgewertet wird, so aktiviert ist.
Benutzer klickt auf die checkbox aus und sendet das Formular (form ist hier nicht gezeigt )
2)Die action-Methode legt die disabled = true
und required= true
und der gleichen Seite gerendert wird, wieder
3)In dieser Phase , UI-check-box angeklickt und deaktiviert. Wenn in dieser Phase , form ist
erneut vorgelegt, bean.setRequired
- Methode aufgerufen wird, mit Set-Wert als FALSE
in der Erwägung, dass festgelegt werden sollte, die es mit dem Wert TRUE
4)Als ich disabled="#{false}"
dieses Problem verschwunden und Bohne.setRequired-Methode aufgerufen wird, mit Set-Wert als TRUE
Also Frage ist warum ist das Verhalten der in Schritt 3 beobachtet, obwohl UI-zeigt das Kontrollkästchen im angeklickten Zustand (dh es hat einen Wert als TRUE
habe ich auch gedruckt
bean.gewünschten Wert und auswerten zu TRUE
nur
Code :
<h:panelGroup>
<h:selectBooleanCheckbox id="invite" disabled="#{bean.disabled}" value="#{bean.required}" />
<h:outputText value="Do Update"/>
</h:panelGroup>
- Ist die
c:if
Stück relevant für die Frage? - Biker : es ist nicht wirklich keine Relevanz
- Dann entfernen Sie es aus der Frage. Fragen enthalten soll, die minimalen code-Stück zu zeigen, das problem.
- Was den Umfang der backing-bean?
- Biker : entfernt den unnötigen Teil von Frage
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sicherstellen, dass der Träger-Eigenschaft gebunden
#{bean.disabled}
ist ein boolean und kein string, für die Werte"TRUE"
und"FALSE"
werden.Auch, das Verhalten, das Sie in Schritt 3 beschrieben, wird erwartet. Wenn das Kontrollkästchen deaktiviert ist, wird der Wert übermittelt wird immer falsch sein da Browser in der Regel ignoriert deaktivierte Felder beim Formular Absenden. Um sicherzustellen, dass Sie den richtigen Wert, erhalten ein hidden-Feld neben dem Kontrollkästchen, halten Sie beide synchron, und verwenden Sie den Wert des versteckten Feldes statt, um zu testen, ob die checkbox aktiviert oder deaktiviert werden. So etwas wie unten:
Nichts mit Ihrer Frage, wenn Sie mit der
<c:set/>
für bedingtes rendering, sollten Sie die Verwendung<a4j:outputPanel rendered = "#{someCondition}"/>
statt und auf Ihrem Formular Absenden zu aktualisieren (wenn es ein AJAX submit.