Struts2中 JSP使用request.setAttribute()后,在Action中为什么取不到值?

因为页面上的request 和使用form提交的request 请求 不是一个对象。测试如下:
首先在jsp页面中打印出来request对象
<%
	request.setAttribute("test","test");
	System.out.println("request="+request+"返回页面对象");//这里打印出页面request对象
%>
部分action代码如下:
	HttpServletRequest request = ServletActionContext.getRequest();
	System.out.println("request="+request+"action里的request对象");
	String  test = (String) request.getAttribute("test");
	System.out.println("test="+test);
经过测试 输出结果如下:
	request=org.apache.struts2.dispatcher.StrutsRequestWrapper@199f0e5返回页面对象
	request=org.apache.struts2.dispatcher.StrutsRequestWrapper@19665e1action里的request对象
	test=null
	request=org.apache.struts2.dispatcher.StrutsRequestWrapper@19665e1返回页面对象
说明:
输出结果第一行 是第一次加载请求页面时,调用当前页面的request对象(其实我们打开请求页面时产生的请求对象)
第二行 是我用form 提交然后在action里获取的request对象,可以看到两个request对象的类型是一样的 但是值却不一样,这正好说明了 我们每次请求 都会重新产生一个request对象。
到这里,第三行就毫无疑问了,既然重新生成了request对象 那当然不会有我们之前set的属性咯。
第四行很关键,我们看到了那个action里的request对象 返回到了页面上,他们是同一个类型,同一个对象。这正好说明了 当我们的响应模式为dispatcher时 request参数也会返回到页面,因为request对象没有变。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Q:在jsprequest.setAttribute怎么用? A: 在JSPrequest.setAttribute可以用于将存储在HttpServletRequest请求对象,以便在这个请求及其对应的请求作用域内可见。常见的用法是存储从后端Servlet获的数据,并在前端JSP使用。例如:request.setAttribute("name", "张三");在JSP页面可以通过${name}获到这个。 ### 回答2: 在JSPrequest.setAttribute()方法用于在当前JSP页面设置一个属性,这个属性可以作为一个对象或一个简单的,供后面的页面或Servlet使用。 例如,我们可以在一个JSP页面request.setAttribute()方法设置一个字符串变量,然后在同一个页面或不同的页面使用这个变量。示例如下: <% String name = "张三"; request.setAttribute("name", name); %> <p>欢迎来到${name}的主页</p> 在这个例子,我们设置了一个名为"name"的属性,属性为"name"字符串变量的"张三"。在JSP页面,我们可以使用EL表达式${name}获这个属性的,并把它插入到HTML标记。 除了字符串变量,request.setAttribute()方法也支持其他类型的对象,例如集合、数组、自定义类等。当我们在JSP页面这些属性时,需要根据属性的类型进行解析和处理。 需要注意的是,设置的属性只是在当前请求范围内有效,如果需要在不同的请求之间传递数据,可以使用Session或Application作用域。另外,如果未指定属性的作用域,默认情况下会使用request作用域。 总之,request.setAttribute()方法是JSP页面用来设置请求属性的核心方法之一,它提供了方便的方式来在页面间传递数据和对象。为了发挥它的最大作用,我们需要了解属性的作用域、数据类型和应用场景,从而合理使用它。 ### 回答3: request.setAttribute方法是JSP用于设置请求(request)对象属性的重要方法之一。当JSP页面需要将数据传递给Java代码或其他JSP页面时,可以使用request.setAttribute方法将数据放入请求对象。这样,在同一请求处理链调用其他的页面或执行后续的Java代码时,就可以获这些数据进行处理。 request.setAttribute方法需要两个参数。第一个参数是字符串类型的属性名,用于给属性命名,方便后续的调用。第二个参数是任意类型的数据,可以是基本类型、对象类型或数组类型等等,需要放入请求对象的数据。举个例子: <% String name = "Tom"; int age = 18; ArrayList<String> hobbyList = new ArrayList<String>(); hobbyList.add("football"); hobbyList.add("reading"); request.setAttribute("name", name); request.setAttribute("age", age); request.setAttribute("hobbyList", hobbyList); %> 在上面的代码,我们通过request.setAttribute方法将三种不同类型的数据分别存入请求对象,这些数据可以在后续的页面或Java代码进行调用。 在获请求对象属性时,可以使用request.getAttribute方法。该方法需要一个参数,即属性名,用于获指定名称的请求对象属性。如果指定名称的属性不存在,则该方法返回null。举个例子: <% String name = (String)request.getAttribute("name"); int age = (int)request.getAttribute("age"); ArrayList<String> hobbyList = (ArrayList<String>)request.getAttribute("hobbyList"); %> 在上面的代码,我们使用request.getAttribute方法获之前存入请求对象的三种类型的数据,这些数据可以用于页面渲染或后续的Java代码处理。 在总结一下,request.setAttribute方法是JSP用于将数据存入请求对象的重要方法,可以在请求处理链多个页面或Java代码进行数据传递和处理。在使用该方法时,需要注意属性名的命名规范和数据类型的匹配。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值