为什么在使用struts时有时会抛出request.getAttribute

时间:2014-04-17 08:41:09

标签: java jsp struts

是错误:

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

但是后跟cast(String)就可以了:

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

还有更多。接着是好的。

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

为什么?

3 个答案:

答案 0 :(得分:1)

request.setAttribute("key","value as Object")存储为Object的值(注意大O),因此当您检索回request.getAttribute("key")时,它会返回Object类型,因此您需要将其关闭。

答案 1 :(得分:0)

Example here

对于<bean:define/>,您可以直接将对象设置为值

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

它总是返回Object

所以它显示错误。

你应该施展它。像

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

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

Struts bean Tag class

答案 2 :(得分:0)

根据< bean:define >文档:

  • 指定name属性(加上可选的属性和范围属性) - 创建的属性和脚本变量将是检索到的JavaBean属性的类型,除非它是Java基本类型,在这种情况下它将被包装在适当的包装类中(即int由java.lang.Integer包装)。
  • 指定value属性 - 创建的属性和脚本变量的类型为java.lang.String,设置为此属性的值。
  • 指定嵌套的正文内容 - 创建的属性和脚本变量的类型为java.lang.String,设置为嵌套正文内容的值。

HttpServletRequest#getAttribute(String name)会返回Object,而myId则会String。这就是你必须做演员表的原因。

与此同时,JSP片段

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

将完全有效,因为request.getAttribute(...)将在this is部分之后进行评估和打印。这里需要进行投射,因为在这种情况下会调用Object#toString()并打印结果。