2014-09-02 58 views
0

工作在我的动态Web应用程序(在Eclipse中工作,在Tomcat 7服务器),我的网页有相同的标题,其中包括在当前登录用户的用户名。request.getAttribute不包含的文件

而不是具有相同标题出现在每一页上,我提取并包括

<%@ 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

request.getSession()。的setAttribute .... – StackFlowed 2014-09-02 21:27:01

回答

0
<%= request.getAttribute("name") == null ? "Logged In" : "Not logged in" %> 

工作,因为你已经使用了小脚本打印请求属性的传统方式。然而,这被认为是不好的做法。看到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

评估希望这可以帮助 !!

0

你应该使用request.getSession()。setAttribute(“name”,“value”);

+0

没有区别... – 2014-09-02 21:59:51

0

我得到这个通过使用此

<%= request.getAttribute("name") == null ? "Logged In" : "Not logged in" %> 

代替了原来的

${request.getAttribute("name") == null ? "Logged In" : "Not logged in"} 

我想这之后我看到了,这是另一种方式来写表达式最终奏效。我不知道为什么这种方式有效,而另一种方式不会,如果有人能够添加一个解释,我会很喜欢。

0

你也可以用这种方式使用JSTL。更好的方式使用jstl而不是scriptlet。

<c:out value="${empty name ? 'Logged In' : 'Not logged in' }" />