Struts2:前后台的数据交互

页面获取action传来的值:

方法一:使用Java代码

<%= request.getParameter("str")%><%=request.getAttribute("str")%> 
   
   
  • 1
  • 1

方法二:使用EL表达式

${str}


   
   
  • 1
  • 1

方法三:使用Struts2标签

从ValueStack取值:

   <s:property value="name"/>
   <s:property value="user"/>
   <s:property value="user.id"/>
   
   
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

从ActionContext中取值.
取值的时候需要加上一个符号:#

   <s:property value="#user"/>
   <s:property value="#user.id"/>
   
   
  • 1
  • 2
  • 1
  • 2
<s:property value="#parameters.name"/><br>

   //获得request中key为MyName的值
   <s:property value="#request.MyName"/><br>
   //获得session中key为MyName的值的值
   <s:property value="#session.MyName"/><br>
   //获得application中key为MyName的值的值
   <s:property value="#application.MyName"/><br>
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

action向页面传值:

方法一:放在request里:

1、通过ActionContext的实例化对象的put:

ActionContext context = ActionContext.getContext();
cotenxt.put(key, value);
   
   
  • 1
  • 2
  • 1
  • 2

对应前端取值的4种方式:

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

${str}

 <s:property value="str"/> 

 <s:property value="#request.str"/>
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

2、通过ActionContext的实例化对象的get:

Map request = (Map)ActionContext.getContext().get("request");
request.put(key,value);
   
   
  • 1
  • 2
  • 1
  • 2

获取方法同上(不可用S标签)

3、通过ServletActionContext获取request:

HttpServletRequest request = ServletActionContext.getRequest(); request.setAttribute(key, value);
   
   
  • 1
  • 1

方法二:放在session里面:

1、通过request获取session

HttpServletRequest request = ServletActionContext.getRequest();

    HttpSession session = request.getSession(); session.setAttribute(key, value);
   
   
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

2、通过ActionContext获取session

  HttpSession session =ActionContext.getContext().getSession();
  session.setAttribute(key, value);
   
   
  • 1
  • 2
  • 1
  • 2

方法三:使用ValueStack

ValueStack vs = ActionContext.getContext().getValueStack();
User user = new User();
vs.push(user);
   
   
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

附:ActionContext

1、每一次请求都会创建一个ActionContext对象(也会创建一个ValueStack),struts框架默认向这个对象里面存放的对象(数据)很多,包括request、session、application、ValueStack、parameters等。
2、request session application的map类型获取:
(1)手动获取

 ActionContext ac = ActionContext.getContext();
       //获得Map类型request
       Map<String,Object> request = 
             (Map<String, Object>) ac.get("request");

       //获得Map类型session
           Map<String, Object> session = ac.getSession();

       //获得Map类型application
       Map<String, Object> application = ac.getApplication();
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

(2)自动获取(通过继承接口)
三个接口依次为:
RequestAware,SessionAware,ApplicationAware

public class WebActionTest extends ActionSupport implements RequestAware,SessionAware,ApplicationAware{
            private Map<String, Object> request;
            private Map<String, Object> session;
            private Map<String, Object> application;

            @Override
            public String execute() throws Exception {
                //页面中用原类型的对象取正常值就可以了
                request.put("MyName", "tom");
                session.put("YourName", "zhansan");
                application.put("HerName", "lily");
                return SUCCESS;
            }
            public void setRequest(Map<String, Object> request) {
                this.request = request;
            }

            public void setSession(Map<String, Object> session) {
                this.session = session;
            }

            public void setApplication(Map<String, Object> application) {
                this.application = application;
            }
        }
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

get and go!

(function () {('pre.prettyprint code').each(function () { var lines = (this).text().split(\n).length;var numbering = $('
    ').addClass('pre-numbering').hide(); (this).addClass(hasnumbering).parent().append( numbering); for (i = 1; i
    • 0
      点赞
    • 0
      收藏
      觉得还不错? 一键收藏
    • 0
      评论
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值