导航

Struts2获取web元素(Ioc/DI)

Posted on 2012-10-25 10:04  阿里大盗  阅读(204)  评论(0)    收藏  举报

方法:Action实现RequestAware,SessionAware等,属性Map, 并override相应方法(public void setSession)。

eg.

package com.bjsxt.struts2.user.action;

import java.util.Map;

import org.apache.struts2.interceptor.ApplicationAware;
import org.apache.struts2.interceptor.RequestAware;
import org.apache.struts2.interceptor.SessionAware;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class LoginAction2 extends ActionSupport implements RequestAware,SessionAware, ApplicationAware {
 
 private Map<String, Object> request;
 private Map<String, Object> session;
 private Map<String, Object> application;
 
 //DI dependency injection
 //IoC inverse of control
 public String execute() {
  request.put("r1", "r1");
  session.put("s1", "s1");
  application.put("a1", "a1");
  return SUCCESS;
 }

 @Override
 public void setRequest(Map<String, Object> request) {
  this.request = request;
 }

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

 @Override
 public void setApplication(Map<String, Object> application) {
  this.application = application;
 }
 }

介绍:Struts2拿到HttpRequest将之映射为MapRequest,然后找到相应的Action,接着Struts2利用反射机制了解Action是否实现了xxxAware。若是,则将MapRequest内容保存入Action的属性Map xxx中(调用的是Action中的public void setXXX),于是Action就获得了web元素,然后可通过put(  ,  )方法往里面写值。

输出的JSP页面可以通过<s:property value="#key" /> 来获取StackContext中的内容,通过<s:property value="key"来获得ValueStack中的内容。

<s:debug></s:debug>可调出StackContext和ValueStack。