我遇到了下一个问题。我使用2种菜单(适用于导师和学生)。我决定在依赖于角色登录用户的情况下包含菜单。一切都很好。但我使用下一个构造:
<div class="left">
<c:if test="${role eq 'TUTOR'}">
<c:import url="/page/tutor/menuForTutor.jsp" charEncoding="UTF-8"/>
</c:if>
<c:if test="${role eq 'STUDENT'}">
<c:import url="/page/student/menuForStudent.jsp" charEncoding="UTF-8"/>
</c:if>
</div>
人们说使用'eq'
是一种不好的风格。我试图摆脱这种情况:我创建了用户的标签。但是当我下次做
if (Role.TUTOR.equals(role)) {
try {
pageContext.getOut().write("<c:import url="/page/tutor/menuForTutor.jsp" charEncoding="UTF-8"/>");
} catch (IOException ex) {
Logger.getLogger(MenuTag.class.getName()).log(Level.SEVERE, null, ex);
}
我无法得到我所期望的,因为据我了解,html 中的转换 jsp 发生在创建用户的标签之前。
你能建议我其他方法吗?谢谢
附言而且我还在我的 jsp 文件中为菜单 (fmt) 使用本地化
<fmt:bundle basename="by.bsuir.testing.resource.content" prefix="content.">
<fmt:message key="menu" var="Menu"/>
<fmt:message key="startPage" var="StartPage"/>
<fmt:message key="menuitem.editInfoAboutTest" var="MenuItemEditInfoAboutTest"/>
</fmt:bundle>
<h1>${Menu}</h1>
<ul>
<li>
<a href="${pageContext.servletContext.contextPath}/page/common/login.jsp">
${StartPage}
</a>
</li>
<li>
<a href="controller?command=all_Subject_Edit">
${MenuItemEditInfoAboutTest}
</a>
</li>
</ul>
为什么"eq"是一种糟糕的风格(或者"=="是相同的)。
但是你的标签不起作用,因为你不能把JSP指令写到外面,并期望它会工作:
pageContext.getOut().write(
"<c:import url="/page/tutor/menuForTutor.jsp" charEncoding="UTF-8"/>");
您只能编写HTML - 因为它的输出发送到浏览器,而不是用于编译到 Web 容器。
您可以尝试直接调用ImportTagImportTag
:
ImportTag tag = new ImportTag();
tag.setUrl("/page/tutor/menuForTutor.jsp");
tag.setCharEncoding("UTF-8");
tag.setContext(pageContext);
tag.doStartTag();
附言但我只会使用"eq"或"=="代替。