struts2 拦截result的相关信息
cookqq ›博客列表 ›struts

struts2 拦截result的相关信息

2012-05-31 15:40:18.0|分类: struts|浏览量: 1664

摘要: 情景: 由于业务的需要,我需要对namespace的为calculator并且type为layout的进行特殊的处理。 这就需要用到拦截器,如下配置文件 <package name="calculator" e...

情景:

由于业务的需要,我需要对namespace的为calculator并且type为layout的进行特殊的处理。

这就需要用到拦截器,如下配置文件

<package name="calculator" extends="default" namespace="/calculator">
		<action name="index" class="com.CalculatorAction" method="index">
		<result name="success" type="layout">/WEB-INF/calculator/index.jsp</result>
		</action>

 1、拦截获得namespace很好做,代码:

Object action = invocation.getAction();
String namespace = invocation.getProxy().getNamespace();

2、但是怎么知道返回的结果是type="layout"的类型的呢?

(1)在 interface ActionProxy 中看到了这个方法

 ActionConfig getConfig();

(2)在class ActionConfig 中看到了这个方法:

  public Map<String, ResultConfig> getResults() {
        return results;
    }

这个就因该是要找的那个方法。

public class ResultConfig extends Located implements Serializable {

    private Map<String,String> params;
    private String className;
    private String name;
....
}

(3)测试一下是否和想的一样啊 ?

	ActionProxy ap = invocation.getProxy();
        Map<String, ResultConfig> map = ap.getConfig().getResults();
	Collection<ResultConfig> c = map.values();
       Iterator it = c.iterator();
        for (; it.hasNext();) {
       	ResultConfig rc = (ResultConfig) it.next();
            System.out.println( rc.getClassName());
            System.out.println( rc.getName());
            System.out.println( rc.getLocation());
           System.out.println( rc.getParams());

      }

打印的结果:
  /***
//             * 
//             * org.apache.struts2.dispatcher.ServletDispatcherResult
//				exception
//				global-results - file:/E:/javaHome/workspace2/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/fangdo/WEB-INF/classes/struts.xml:36:19
//				{location=/WEB-INF/web/error.jsp}
//				com.core.view.LayoutResult
//				success
//				action - file:/E:/javaHome/workspace2/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/fangdo/WEB-INF/classes/struts/struts-calculator.xml:128:86
//				{location=/WEB-INF/calculator/itemUser/listTax.jsp}
//             * */

 (4)虽然没有直接表示type="layout"的这个属性,但是rc.getClassName()已经能完成,根据className就可以判断了。

完整代码:

 

package com.action.interceptor;

import java.util.Map;

import com.action.Action;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.ActionProxy;
import com.opensymphony.xwork2.config.entities.ResultConfig;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

public class CustomerInterceptor extends AbstractInterceptor {

	private static final long serialVersionUID = 977669153564407337L;

	@Override
	public String intercept(ActionInvocation invocation) throws Exception {

		Object action = invocation.getAction();
		ActionProxy actionProxy = invocation.getProxy();
		String namespace = actionProxy.getNamespace();
		if(action instanceof Action){
			action = (Action)action;
			if(namespace.contains("calculator")){
				Map<String, ResultConfig> map = actionProxy.getConfig().getResults();
				ResultConfig resultConfig = map.get("success");
				if(resultConfig!=null){
					String className = resultConfig.getClassName();
					if(className!=null && className.equals("com.core.view.LayoutResult")){
						//要处理的代码
					}
				}
			}
		}
		return invocation.invoke();
	}

}

 

一键分享文章

分类列表

  • • struts源码分析
  • • flink
  • • struts
  • • redis
  • • kafka
  • • ubuntu
  • • zookeeper
  • • hadoop
  • • activiti
  • • linux
  • • 成长
  • • NIO
  • • 关键词提取
  • • mysql
  • • android studio
  • • zabbix
  • • 云计算
  • • mahout
  • • jmeter
  • • hive
  • • ActiveMQ
  • • lucene
  • • MongoDB
  • • netty
  • • flume
  • • 我遇到的问题
  • • GRUB
  • • nginx
  • • 大家好的文章
  • • android
  • • tomcat
  • • Python
  • • luke
  • • android源码编译
  • • 安全
  • • MPAndroidChart
  • • swing
  • • POI
  • • powerdesigner
  • • jquery
  • • html
  • • java
  • • eclipse
  • • shell
  • • jvm
  • • highcharts
  • • 设计模式
  • • 列式数据库
  • • spring cloud
  • • docker+node.js+zookeeper构建微服务
版权所有 cookqq 感谢访问 支持开源 京ICP备15030920号
CopyRight 2015-2018 cookqq.com All Right Reserved.