1

次の質問があります。jspページでは、ロールに応じて2人のユーザー(家庭教師と学生)のメニューを使用し、メニューファイルからどちらを含めるかを選択します。このように

<c:if test="${role eq 'Tutor'}">
                <c:import url="/page/menuForTutor.html" charEncoding="UTF-8"/>
</c:if>
<c:if test="${role eq 'Student'}">
             <c:import url="/page/menuForStudent.html" charEncoding="UTF-8"/>
</c:if>

ユーザー記述子を使用する必要があります

public class MenuTag extends TagSupport{

    private static final String PARAM_ROLE_TUTOR = "Tutor";
    private static final String PARAM_ROLE_STUDENT = "Student";

    @Override
    public int doStartTag(){
        HttpServletRequest request = (HttpServletRequest)pageContext.
                                                   getRequest();
        HttpSession session = request.getSession();
        String role = (String) session.getAttribute("role");
        if (PARAM_ROLE_TUTOR.equals(role)){
            try {
                pageContext.getOut().print("<c:import url=\"/page/menuForTutor.html\" charEncoding=\"UTF-8\"/>");
            } catch (IOException ex) {
                Logger.getLogger(MenuTag.class.getName()).log(Level.SEVERE, null, ex);
            }
        } else if(PARAM_ROLE_STUDENT.equals(role)){
        }
        return SKIP_BODY;
    }       
}

debag を使用すると、すべての手順を実行したことがわかりますが、チューターのメニューが jsp に表示されませんでした。何か案は?

4

1 に答える 1

1

session("role") が別のコード部分に設定されていると仮定します!

set JspWriter out = pageContext.getOut();

コードで次のようなものです

JspFactory  factory     = JspFactory.getDefaultFactory();
PageContext pageContext = factory.getPageContext(
this,
request,
response,
null,  // errorPageURL
false, // needsSession
JspWriter.DEFAULT_BUFFER,
true   // autoFlush
);
    ....
            JspWriter   out     = pageContext.getOut();
            HttpSession session = request.getSession();
            String role = (String) session.getAttribute("role");
            if (PARAM_ROLE_TUTOR.equals(role)){
                try {
                    out.println("<c:import url=\"/page/menuForTutor.html\" charEncoding=\"UTF-8\"/>");
                    out.flush();
                    // Evaluate the body if there is one
                    return EVAL_BODY_BUFFERED;
.......

else return SKIP_BODY;

EDITコードを参照してください:「EVAL_BODY_BUFFEREDを返す」必要があります。

于 2012-05-26T14:18:14.950 に答える