Pracuję z JSF 2.0, JBoss 7.1.1 Final i mam następujący problem z selectOneMenu. Chcę móc ustawić pole w zarządzanym komponencie bean na wartość true/false/null. Tak więc stworzyłem po selectOneMenu:h: selectOneMenu z elementami logicznymi nie działa z wartością pustą
<h:selectOneMenu value="#{personList.criteria.registrationComplete}" >
<f:selectItem itemValue="#{null}" itemLabel="Any.." />
<f:selectItem itemValue="true" itemLabel="Yes"/>
<f:selectItem itemValue="false" itemLabel="No"/>
</h:selectOneMenu>
Teraz, jeśli zdecyduję się 'Każdy ..', to przypisze "false" do pola registrationComplete (co jest logiczne). Tak więc null jest interpretowane jako fałszywe. Próbowałem również użyć wartości logicznych w selectItem (-ów), to jest:
<h:selectOneMenu value="#{personList.criteria.registrationComplete}" >
<f:selectItem itemValue="#{null}" itemLabel="Any.." />
<f:selectItem itemValue="#{true}" itemLabel="Yes"/>
<f:selectItem itemValue="#{false}" itemLabel="No"/>
</h:selectOneMenu>
I ja również zarejestrowany konwerter w twarze-config następująco:
<converter>
<converter-id>booleanConverter</converter-id>
<converter-class>javax.faces.convert.BooleanConverter</converter-class>
</converter>
i starał się go używać:
<h:selectOneMenu value="#{personList.criteria.registrationComplete}" >
<f:selectItem itemValue="#{null}" itemLabel="Any.." />
<f:selectItem itemValue="true" itemLabel="Yes"/>
<f:selectItem itemValue="false" itemLabel="No"/>
<f:converter converterId="booleanConverter"/>
</h:selectOneMenu>
Jednak wszystkie te próby spowodowały to samo zachowanie - po wybraniu wartości pustej, interpretowano ją jako fałszywą.
I debugowałem to iw śladzie stosu znalazłem miejsce, gdzie to się dzieje. W AstValue.setValue(EvaluationContext, Object) line: 204
nazywa to
ELSupport.coerceToType(value, targetClass)
parametr wartość jest null i targetClass jest logiczna. Ta metoda coerceToType zwraca następnie wartość false.
Jakieś pomysły na rozwiązanie tego problemu? Dzięki!
Co to jest podpis setRegistrationComplete metoda()? Jaki jest typ argumentu? Boolean lub boolean? – prageeth
@prageeth: OP wyraźnie określił "Boolean". – BalusC
@prageeth to public void setRegistrationComplete (Boolean registrationComplete). A pole registrationComplete to Boolean – lukas