Struts2基础之七:action把数据写入各属性范围web对象(写web对象)



一:action实现RequestAware,SessionAware,ApplicationAware三个接口,用于读写web对象


struct通过Aware的void setXXX()方法,把web对象读到action中,赋值给私有属性

execute()方法把值写到contextStack里,

如果返回“success”的话,就会把全部上下文(其中有自己写的东西)传递到配置好的页面去,也就是这里配的result.jsp

(action对于web对象的读写,还有几种方式,有时间来补充)

package com.rt.struts2.actionDemo;

import java.util.Map;
import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.interceptor.ApplicationAware;
import org.apache.struts2.interceptor.RequestAware;
import org.apache.struts2.interceptor.SessionAware;

//实现RequestAware,SessionAware,ApplicationAware三个接口,用于读写web对象
public class WebObjectAction01 extends ActionSupport implements RequestAware,SessionAware,ApplicationAware
{
	private Map<String,Object> request;//这仨名字固定,因为下边接口的set函数名固定。不然反射时候找不到
	private Map<String,Object> session;
	private Map<String,Object> application;
	
	public String execute()
	{
		System.out.println("__WebObjectAction01__");
		request.put("req1", "valueOfReq1");
		//Response是servlet返给jsp的,所以不用在这设置
		session.put("ses1", "valueOfSes1");
		application.put("app1", "valueOfApp1");
		return "success";
	}
	
	//接口内必须实现的方法,struts会把页面的对象set进来
	public void setApplication(Map<String, Object> a) {
		this.application = a;
	}
	public void setSession(Map<String, Object> s) {
		this.session = s;
	}
	public void setRequest(Map<String, Object> r) {
		this.request = r;
	}
}


二:触发JSP

先执行此jsp,使程序跳转到action

  <body>
    <h2> 触发action的jsp </h2>
	<form name="f1" action="" method="post" >   
		<!-- 用onclick,JS方法:'webObj/webObj01'不要以/打头,否则会补全地址 -->
		<input type="button" value="用js提交表单" οnclick="javascript:document.f1.action='webObj/webObj01';document.f1.submit()">
    </form><br>
  </body>




三:显示action执行结果的jsp

显示action运行的结果,
<s:debug>标签中有这么一句话: These items are available using the #key notation
就是说上下文中的项目,直接用#就能访问的到

显示要用到内置标签:

<%@ taglib uri="/struts-tags" prefix="s"%>
  <body>
   <h2>显示结果</h2> <br>  
   <!-- 《s:property》用于提取valueStack中的web对象,‘#’井号的解释可以在最下边的s:debug标签中找到 -->
   <!-- getAttribute()能提取证明struts已经把action中的数据,写入到了web上下文之中,用相应的属性范围就能找到 -->
   <s:property value="#request.req1" />  -IS- <%=request.getAttribute("req1") %> <br/>
   <s:property value="#session.ses1"  />  -IS- <%=session.getAttribute("ses1") %> <br/>
   <s:property value="#application.app1" />  -IS- <%=application.getAttribute("app1") %> <br/>
   <s:debug/>
  </body>


PS:#arrt.* 能访问所有属性范围

   <s:property value="#request.req1" /><br/>
   <s:property value="#attr.req1" /><br/>
   <!-- 上边两句执行结果一样,attr能够访问任意一个属性范围 -->
   <s:property value="#attr.ses1" /><br/>



四:最后配置struts.xml

    <!-- 读取web对象的值,通配数字01,02,03 -->
    <package name="webObj" namespace="/webObj" extends="struts-default">
		<action name="webObj*" class="com.rt.struts2.actionDemo.WebObjectAction{1}">
            <result name="success">
                /result.jsp
            </result>
            <result name="error">
                /outputAction.jsp
            </result>
        </action>
    </package>





















  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值