Mojarra 2.1.Компоненты все еще попадают в дерево компонентов, даже если атрибут render is false
Я проверил способ public void execute(FacesContext facesContext) throws FacesException
в классе com.sun.faces.lifecycle.RestoreViewPhase
. Теперь, после восстановления представления с помощью invokation viewRoot = viewHandler.restoreView(facesContext, viewId);
, мы имеем дерево compelete из предыдущего запроса (если это postback).
Я проверил, что дерево (итерации вручную через children
свойств компонентов в отладчике) и обнаружил, что составные компоненты, объявленные следующим образом:
<h:panelGroup rendered="#{bean.id == 1}">
<utils:dropDownListFilterItem />
</h:panelGroup>
<h:panelGroup rendered="#{bean.id == 2}">
<utils:dateFilterItem />
</h:panelGroup>
<h:panelGroup rendered="#{bean.id == 3}">
<utils:fieldFilterItem />
</h:panelGroup>
были все в этом дереве. Это происходило, несмотря на то, что #{bean.id}
был оценен до 2. Я подсчитал, что единственный экземпляр <utils:dateFilterItem />
будет в дереве.
Итак, мой вопрос заключается в том, как обработчик rendered
обрабатывается Mojarra? Включен ли атрибут только для фазы render-responces?
Другой связанный с этим вопрос: http://stackoverflow.com/q/18768527 – BalusC