В моем JSF pagecode, у меня есть что-то похожее на следующее:ч: selectOneRadio проходит нулевой символ вместо нулевого значения
<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>
В моей pagecode бэк-боба, у меня есть что-то вроде следующего:
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 вместо нуля.
Есть ли способ сделать 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>
Хотя я согласен, это, к сожалению, не то, что я могу легко изменить в этом проекте - пример кода я предоставил это упрощение. Характер, присутствующий на самом деле, не входит в основной класс Pagecode, но внутри другого объекта, который является свойством подкласса, и, к сожалению, этот класс является частью общей библиотеки, используемой несколькими другими проектами. Я бы хотел изменить его, но на данный момент я не могу. Даже ради любопытства, был ли способ сделать h: selectOneRadio отправить null вместо нулевого символа? Кажется, это странная реализация. – Chatoyancy
Вина EL, а не JSF. Вы можете попробовать отключить COERCE_TO_ZERO. Связано: http://balusc.omnifaces.org/2015/10/the-empty-string-madness.html – BalusC
Я только что проверил это с аргументом COERCE_TO_ZERO и могу проверить, исправил ли он это. Поведение связано с этой проблемой. Благодаря! – Chatoyancy