1

在我的应用程序中,我有导师和学生作为用户角色。我决定两者的主页都是一样的。但是对于导师和用户来说,菜单会有所不同。我制作了.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 不是更好的解决方案,但我找不到其他解决方案。我的问题的最佳决定是什么?

4

1 回答 1

2

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

于 2012-11-10T10:58:51.100 回答