JSF动态ui:include

时间:2012-11-10 08:54:15

标签: jsf jsf-2 menu

在我的应用中,我有导师和学生作为用户的角色。我决定两者的主页都是一样的。但菜单对于导师和用户来说会有所不同。我制作了.xhtml页面tutorMenu.xhtml和student.xhtml。并希望从角色包括菜单中依赖。对于整个页面,我使用布局,并在每个页面中更改ui:composition中的内容“内容部分”。

在menu.xhtml

<h:body>
    <ui:composition>        
            <div class="menu_header">
                <h2>
                    <h:outputText value="#{msg['menu.title']}" />
                </h2>
            </div>
            <div class="menu_content">
                <с:if test="#{authenticationBean.user.role.roleId eq '2'}">
                    <ui:include src="/pages/content/body/student/studentMenu.xhtml"/>
                </с:if>

                <с:if test= "#{authenticationBean.user.role.roleId eq '1'}">
                    <ui:include src="/pages/content/body/tutor/tutorMenu.xhtml" />
                </с:if>
            </div>      
    </ui:composition> 

我知道使用jstl我不是更好的解决方案,但我找不到其他的。我的问题最好的决定是什么?

1 个答案:

答案 0 :(得分:2)

在这种情况下使用jstl-tags非常好,因为Facelets有一个相应的标记处理程序(在视图树创建时处理)用于jstl标记并完美地处理它们。在这种情况下c:如果可以阻止ui:include的处理(以及添加位于包含的xhtml文件中的组件),这会导致组件树的减少和表单的更好性能。 使用此方法的一个缺点是您无法使用ajax更新这些表单部分,即您更改用户角色并使用ajax刷新表单,因为另一个角色的ui:include不再是视图的一部分。在这种情况下,您必须执行整页刷新。