0

我面临下一个问题。我使用 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 发生在创建用户标签之前。

你能建议我做我想做的其他方法吗?谢谢

PS而且我在我的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>
4

1 回答 1

1

我不知道为什么 '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();

PS 但我会使用 'eq' 或 '==' 代替。

于 2012-06-02T18:19:09.853 回答