在我的应用中,我有导师和学生作为用户的角色。我决定两者的主页都是一样的。但菜单对于导师和用户来说会有所不同。我制作了.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我不是更好的解决方案,但我找不到其他的。我的问题最好的决定是什么?
答案 0 :(得分:2)
在这种情况下使用jstl-tags非常好,因为Facelets有一个相应的标记处理程序(在视图树创建时处理)用于jstl标记并完美地处理它们。在这种情况下c:如果可以阻止ui:include的处理(以及添加位于包含的xhtml文件中的组件),这会导致组件树的减少和表单的更好性能。 使用此方法的一个缺点是您无法使用ajax更新这些表单部分,即您更改用户角色并使用ajax刷新表单,因为另一个角色的ui:include不再是视图的一部分。在这种情况下,您必须执行整页刷新。