在我的动态Web应用程序(使用Eclipse,使用Tomcat 7服务器)中,我的页面具有相同的标题,其中包括当前登录用户的用户名。
我没有在每个页面上显示相同的标题,而是提取并包含
<%@ include file="../includes/head.jsp" %>
到每个.jsp的顶部。
但我发现了一个问题。在我创建的Servlet文件中,我有一个变体(取决于jsp页面):
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("Login doGet");
request.setAttribute("name", "value");
request.getRequestDispatcher("resources/jsp/login.jsp").forward(request, response);
}
但是,在 head.jsp 文件中,
${request.getAttribute("name") != null ? "Logged In" : "Not logged in"}
导致“未登录”出现时,我希望它说“登录”(因为我确实传递了一个名为“name”的属性。
任何想法发生了什么?
答案 0 :(得分:0)
你应该使用request.getSession()。setAttribute(“name”,“value”);
答案 1 :(得分:0)
我最终通过使用此
来实现这一目标<%= request.getAttribute("name") == null ? "Logged In" : "Not logged in" %>
而不是原来的
${request.getAttribute("name") == null ? "Logged In" : "Not logged in"}
在我看到这是另一种编写表达式的方法之后我尝试了这个。我不知道为什么这种方式有效,而另一种方式则不然而且如果有人可以添加解释则会喜欢。
答案 2 :(得分:0)
你也可以这样使用JSTL。它是使用jstl而不是scriptlet的更好方法。
<c:out value="${empty name ? 'Logged In' : 'Not logged in' }" />
答案 3 :(得分:0)
<%= request.getAttribute("name") == null ? "Logged In" : "Not logged in" %>
正常工作,因为您已使用scriptlet以传统方式打印请求属性。然而,它被认为是不好的做法。见How to avoid Java code in JSP files?
${request.getAttribute("name") == null ? "Logged In" : "Not logged in"}
不起作用,因为您的Expression Language
所以要么使用jstl作为@ user23123412建议,要么将其写为,
${name == null ? "Logged In" : "Not logged in"}
使用EL进行评估
希望这会有所帮助!!