2014-04-17 35 views
0

時request.getAttribute應時而施放它是錯誤:爲什麼用struts

<bean:define id="myid" value="<%=request.getAttribute("key")%>" 

,但隨後與CAST(字符串)是確定的:

<bean:define id="myid" value="<%=(String)request.getAttribute("key")%>" 

更重要的。其次是好的。

this is <%=request.getAttribute("key")%> 

爲什麼?

回答

0

Example here

對於<bean:define/>你直接設置對象作爲價值

<%=request.getAttribute("key")%> 

它總是返回Object

所以它顯示錯誤。

你應該施放它。像

<%=(String)request.getAttribute("key")%> 

OR

<%=request.getAttribute("key").toString()%>" /> 

Struts bean Tag class

+0

你能詳細解釋一下嗎?我無法理解你的意思,3ks。 – jiafu

0

按照< bean:define >文檔:

  • 指定name屬性(外加可選屬性和範圍屬性) - 創建的一個ttribute和scripting變量將是檢索到的JavaBean屬性的類型,除非它是Java基本類型,在這種情況下,它將被包裝在適當的包裝類中。 int由java.lang.Integer包裝)。
  • 指定value屬性 - 創建的屬性和腳本變量的類型爲java.lang.String,設置爲此屬性的值。
  • 指定嵌套的主體內容 - 創建的屬性和腳本變量的類型爲java.lang.String,設置爲嵌套主體內容的值。

HttpServletRequest#getAttribute(String name)回報Object,而myIdString。這就是爲什麼你必須做演員。

在此期間中,JSP片段

this is <%= request.getAttribute("key") %> 

將完全有效的,因爲request.getAttribute(...)將被評估和this is部分之後打印。這裏需要投射,因爲在這種情況下,調用Object#toString()並打印結果。

+0

怎麼樣:jsp:param標籤的值?它應該被鑄造? – jiafu

+0

找到文檔並檢查它:) –

1

request.setAttribute("key","value as Object")存儲爲Object(注意大O)的值,因此當您檢索返回request.getAttribute("key")時,它返回爲Object類型,因此您需要對它進行種姓。

相關問題