Прежде всего, мои бины управляются пружиной, а не JSF, и я использую настраиваемую область просмотра, как описано в этой статье .Поэтому, если поведение обычного JSF2 странно и может быть связано с Spring, пожалуйста, сообщите мне.
Bean:
public class DepartmentBean {
private DefaultTreeModel model;
public void preRender(ComponentSystemEvent event) throws Exception {
if (model == null) {
model = myService.buildModel();
}
}
public String clear() {
// resetting stuff
return "pretty:";
}
}
View:
<h:form>
<ice:panelGroup styleClass="crud-links">
<h:commandLink value="Delete" action="#{department.deleteDepartment}" />
</ice:panelGroup>
</h:form>
<h:form>
<ice:panelGroup>
<ice:tree id="tree" value="#{department.model}" var="item" hideRootNode="false" hideNavigation="false" imageDir="./xmlhttp/css/xp/css-images/">
<ice:treeNode>
<f:facet name="content">
<ice:panelGroup style="display: inline">
<ice:commandLink value="#{item.userObject.text}"></ice:commandLink>
</ice:panelGroup>
</f:facet>
</ice:treeNode>
</ice:tree>
</ice:panelGroup>
</h:form>
Когда страницазагружается в первый раз, объект model
заполняется данными, но при нажатии кнопки удаления я замечаю, что после очистки выполняется метод preRender()
и модель (которая была заполнена до очистки, становится нулевой и снова заполняется, хотя яЯ нахожусь на той же странице, и он должен поддерживать значение)
Есть ли в коде проблема, которая приводит к такому поведению, или это нормальное поведение?Если проблема может быть связана с Spring, областью пользовательского просмотра или IceFaces, пожалуйста, сообщите.
ОБНОВЛЕНИЕ - ТРЕБОВАНИЕ :
Я хочуинициализировать древовидную модель при построении страницы, и пока я все еще на странице, древовидная модель не инициализируется снова, пока я не сделаю это программно.