2014-04-17 30 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类型,因此您需要对它进行种姓。

相关问题