В моем коде страницы JSF у меня есть что-то похожее на следующее:
<h:selectOneRadio value="#{pagecode.attending}" required="true" id="attendingRadio" binding="#{attendingRadio}">
<f:selectItem itemValue="Y" itemLabel="Yes"/>
<f:selectItem itemValue="N" itemLabel="No"/>
<f:ajax event="click" render="attendingDetails" execute="attendingRadio"/>
</h:selectOneRadio>
<h:panelGroup id="attendingDetails">
<h:panelGroup rendered="#{pagecode.showForm(attendingRadio.value)}">
...
</h:panelGroup>
</h:panelGroup>
В моем компоненте поддержки кода страницы у меня есть что-то вроде следующего:
public class Pagecode {
protected Character attending;
public Character getAttending() {
return attending;
}
public void setAttending(Character attending) {
this.attending=attending;
}
public boolean showForm(Character c) {
if (c==null) {
return false;
}
(other stuff)...
}
}
Ожидаемое поведение:
- Страница загружается. Переключатель не имеет начального значения, поэтому ни Да, ни Нет не выбраны. Однако, поскольку required="true", пользователь получит ошибку проверки, если оставит поле пустым (а так оно и есть).
- При первой загрузке страницы вызывается #{pagecode.showForm(attendingRadio.value)}, я ожидаю, что будет передан нулевой объект, а showForm вернет false.
После устранения некоторых неполадок я определил, что на самом деле происходит то, что вместо передачи нулевого объекта, т.е. эквивалентно showForm(null)
, вместо этого я получаю эквивалент showForm(new Character('\u0000'))
; вместо этого он передает символ Unicode для null.
Есть ли способ заставить JSF передавать нулевой объект Java вместо нулевого символа, когда в моем h: selectOneRadio не выбрано значение? Я использую Apache MyFaces JSF 2.0 на WebSphere Portal 8.0.
В качестве примечания я попытался добавить следующее в свой web.xml, и, к сожалению, это не помогло:
<context-param>
<param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name>
<param-value>true</param-value>
</context-param>