0

私は次の問題に直面しました。私は2種類のメニュー(家庭教師と学生用)を使用しています。そして、ロールログインユーザーに応じてメニューを含めることにしました。すべてがOKです。しかし、私は次の構造を使用します:

<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また、メニュー(fmt)のjspファイルでローカリゼーションを使用します

<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 に答える