Я использую Mojarra 2.0.3 на JBoss 6.1.0 final.У меня проблема с методом установки значения для h: selectBooleanCheckbox, который не вызывается, если в теге указан условный рендеринг.
В частности:
JSF:
<h:selectBooleanCheckbox value="#{somebean.checked}" rendered="#{somebean.render}" />
Пример кода компонента:
private Boolean checked = new Boolean(false);
public Boolean getChecked() {return checked;}
public void setChecked(Boolean checked) {this.checked = checked;}
public boolean getRender() {return true;}
Проблема в том, что setChecked() метод никогда не вызывается при отправке формы.Если я удалю атрибут «rendered», сеттер будет вызван, как и ожидалось.Только когда тег условно отображается, он не обрабатывается при отправке.В любом случае геттер вызывается нормально.
Если я устанавливаю valueChangeListener, это также не вызывается, если selectBooleanCheckbox отображается условно.Наконец, включение тега h: selectBooleanCheckbox в контейнер, такой как: panelGrid, и установка условного рендеринга для «внешнего» компонента приводит к тому же поведению.Похоже, этот флажок не будет обработан, если он будет отображен условно.
Это кажется чем-то базовым, поэтому я предполагаю, что что-то упускаю.Кто-нибудь имеет подобный опыт с этим?
ОБНОВЛЕНИЕ : Управляемый компонент в этом случае является компонентом CDI ConversationScoped.Дальнейшая отладка, казалось, подсказывала, что другой экземпляр компонента был создан и использован где-то в жизненном цикле JSF.Поэтому я изменил bean-компонент, чтобы сделать диалог непостоянным в методе postConstruct.Это заставило JSF выдать следующее исключение при оценке выражения EL, используемого в атрибуте «render»:
23:41:12,179 WARNING[javax.enterprise.resource.webcontainer.jsf.lifecycle] /admin/edit_user_profile.xhtml @41,72 rendered="#{profileEditor.isCurrentUser}": java.lang.IllegalStateException: javax.el.ELException: /admin/edit_user_profile.xhtml @41,72 rendered="#{profileEditor.isCurrentUser}": java.lang.IllegalStateException
at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:111) [:2.0.3-]
at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:190) [:2.0.3-]
at javax.faces.component.UIComponentBase.isRendered(UIComponentBase.java:417) [:2.0.3-]
.
.
.
Caused by: java.lang.IllegalStateException
at com.sun.faces.context.FacesContextImpl.assertNotReleased(FacesContextImpl.java:635) [:2.0.3-]
at com.sun.faces.context.FacesContextImpl.getExternalContext(FacesContextImpl.java:135) [:2.0.3-]
at com.sgi.tds.web.admin.beans.TdsAdminBean.getCurrentUser(TdsAdminBean.java:36) [:]
at com.sgi.tds.web.admin.beans.UserProfileEditorBean.getIsCurrentUser(UserProfileEditorBean.java:153) [:]
at com.sgi.tds.web.admin.beans.UserProfileEditorBean$Proxy$_$$_WeldClientProxy.getIsCurrentUser(UserProfileEditorBean$Proxy$_$$_WeldClientProxy.java) [:]