2010-10-11 76 views
2

我試圖從會話對象的值傳遞給自定義標籤<l:LoginStatus userId="<% out.print((String)session.getAttribute("userId")); %>"/>嘗試在JSP打印會話變量會導致錯誤「等於預期」

爲什麼這條線給我的錯誤:
組織.apache.jasper.JasperException:/index.jsp(1,1)/header.jsp(64,131)等於符號預期

當我通過這樣的<l:LoginStatus userId="4"/>

一切硬編碼值正常工作。

它對我沒有任何意義,我認爲使用out.print將使=不必要的。

回答

3

另一種方法是隻使用EL。這產生更清潔的代碼。

<l:LoginStatus userId="${userId}" /> 
+0

Thankyou,解決了我使用我試圖使用的方法時遇到的問題以及ClassCastExceptions的另一個問題。 – Ankur 2010-10-11 15:02:24

+0

當對象* *實際*不是'字符串'時,CCE可能發生。畢竟,鑄造在這裏是不必要的。 '<%= %>'會在其上隱式調用'String#valueOf()'。所以'<%= session.getAttribute(「userId」)%>'也會起作用。然而,使用* scriptlets *是[不鼓勵](http://stackoverflow.com/questions/3177733/howto-avoid-java-code-in-jsp-files)。 – BalusC 2010-10-11 15:04:53

2

它應該是:

<%= (String)session.getAttribute("userId") %> 

一般來說它是更好的做法是這樣做事,而不是直接寫入頁。此外,事情並不像你認爲的那樣工作。

+1

您上次的聲明在技術上是錯誤的。這是相反的。 – BalusC 2010-10-11 14:36:22

+0

@Busus,嗯,老實說,我使用Asp.Net,而不是JSP。我討厭被錯誤... – jjnguy 2010-10-11 14:42:57

+0

酷編輯摘要btw :) – BalusC 2010-10-11 15:01:22

0

當你打印一個表達式的值,你應該做的語句

<l:LoginStatus userId="<%=out.print((String)session.getAttribute("userId"))%>"/> 

<l:LoginStatus userId="<%=out.print(session.getAttribute("userId")).toString()%>"/> 
+0

'<%= x %>'與'<%out.print(x)%>'的效果相同。所以這個答案是錯誤的。 – BalusC 2010-10-11 14:37:45