request.getAttribute在包含的文件中不起作用

时间:2014-09-02 21:23:04

标签: java jsp attributes include

在我的动态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”的属性。

任何想法发生了什么?

4 个答案:

答案 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进行评估

希望这会有所帮助!!