gpt4 book ai didi

java - 在为登录用户选择类型菜单的情况下,使用 Eq (JSTL) 违反了 MVC 原则

转载 作者:行者123 更新时间:2023-12-01 15:21:25 26 4
gpt4 key购买 nike

我面临下一个问题。我使用两种菜单(针对教师和学生)。我决定根据角色登录用户包含菜单。一切都好。但我使用下一个结构:

<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 指令写入 out 并期望它能够工作:

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”或“==”来代替。

关于java - 在为登录用户选择类型菜单的情况下,使用 Eq (JSTL) 违反了 MVC 原则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10864528/

26 4 0