Ich arbeite mit JSF 2.0, JBoss 7.1.1 Final und habe folgendes Problem mit selectOneMenu. Ich möchte in der Lage sein, ein Feld in einer verwalteten Bean auf true / false / null zu setzen. Daher habe ich folgendes selectOneMenu erstellt:
%Vor%Nun, wenn ich 'Any ..' wähle, wird es dem Feld registrationComplete (das ist Boolean) "false" zuweisen. Also wird null als falsch interpretiert . Ich habe auch versucht, boolesche Werte in den selectItem (s) zu verwenden, also:
%Vor%Und ich habe auch den Konverter in faces-config wie folgt registriert:
%Vor%und versuchte es zu verwenden:
%Vor%Aber alle diese Versuche führten zu demselben Verhalten - wenn der Nullwert ausgewählt wurde, wurde er als falsch interpretiert.
Ich habe es ausgepackt und in der Stack-Trace habe ich den Ort gefunden, an dem es passiert. In AstValue.setValue(EvaluationContext, Object) line: 204
ruft an
%Vor% Der Parametervalue ist null und targetClass ist Boolean. Diese coerceToType-Methode gibt dann false zurück.
Irgendwelche Ideen, wie man diese Probleme lösen kann? Danke!
Dies ist typisch für den Apache EL-Parser, der von Tomcat und JBoss verwendet wird. Es ist bekannt, zwischen Primitiven und seinen Wrapper-Objektrepräsentationen nicht zu unterscheiden, wenn null
-Werte in EL erzwungen werden. Die Wrapper-Typen werden immer als Primitive behandelt. Es funktioniert z. B. in Glassfish.
Sie können dieses Apache EL-Parser-Verhalten ausschalten, indem Sie Ihrem Server-Startskript das folgende VM-Argument hinzufügen:
%Vor%Tags und Links jsf-2 boolean el selectonemenu