是错误:
<bean:define id="myid" value="<%=request.getAttribute("key")%>"
但是后跟cast(String)就可以了:
<bean:define id="myid" value="<%=(String)request.getAttribute("key")%>"
还有更多。接着是好的。
this is <%=request.getAttribute("key")%>
为什么?
答案 0 :(得分:1)
request.setAttribute("key","value as Object")
存储为Object
的值(注意大O),因此当您检索回request.getAttribute("key")
时,它会返回Object类型,因此您需要将其关闭。
答案 1 :(得分:0)
对于<bean:define/>
,您可以直接将对象设置为值
即
<%=request.getAttribute("key")%>
它总是返回Object
所以它显示错误。
你应该施展它。像
<%=(String)request.getAttribute("key")%>
或强>
<%=request.getAttribute("key").toString()%>" />
答案 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()
并打印结果。