В дескрипторе пользователя не работает pageContext.getOut ("<c: import...>")
У меня есть следующий вопрос. На странице 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. Есть идеи?
1 ответ
Решение
Я предполагаю, что сессия ("роль") установлена в другой части кода!
установить 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;
РЕДАКТИРОВАТЬ увидеть код: вы должны "вернуть EVAL_BODY_BUFFERED;"