2014-09-02 184 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' }" />