struts2开发时通过interceptor拦截器实现输入数据过滤前后空格的功能

因为做的项目管理项目居多,有很多查询列表页面,少不了名称查询等功能,但是如果每个逻辑中都验证过滤前后空格会比较麻烦,就像用struts的拦截器实现全部输入的字符串过滤来实现,效果不错,但是在实现过程中有几个地方耽误了点时间,也温故知新了些知识,这里总结一下,互相学习一下 介绍下结构,项目采用SSH框架 首先在拦截器注册文件interceptorContext.xml中声明拦截器:

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">

<bean id="onlineInterceptor" class="main.com.eca.interceptor.OnlineInterceptor">        
</bean>     
<!-- 空格过滤拦截器 -->  
     <bean id="trimInterceptor" class="main.com.eca.interceptor.TrimInterceptor">       
</bean>     

</beans>

    然后配置struts.xml文件,加入拦截队列

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts> <include file="config/catalog.xml"/>

<package name="default" extends="struts-default"> <interceptors> <interceptor name="onlineInterceptor" class="onlineInterceptor"></interceptor> <interceptor name="trimInterceptor" class="trimInterceptor"></interceptor> <interceptor-stack name="baseInterceptorStack"> <interceptor-ref name="onlineInterceptor"></interceptor-ref> <interceptor-ref name="trimInterceptor"></interceptor-ref> <interceptor-ref name="defaultStack"></interceptor-ref> </interceptor-stack> </interceptors> <default-interceptor-ref name="baseInterceptorStack"></default-interceptor-ref>

<global-results>  
  <result name="user" type="redirect">/index.jsp?url=${url}</result>  
</global-results>           

</package>

</struts>

    这里注意一下,在拦截器栈中,trimInterceptor的位置要在defaultStack之上,否则不会生效甚至报错
    下一步就是实现拦截器代码了
    这里在开发中犯了一次二,就是在取参数值的时候,一开始得到value后直接.toString(),然后trim()了,再塞回去,可是报错,参数违法什么的;之后输出了class类型:

[java] view plain copy print? <strong>System.out.println(value.getClass());</strong>
输出为: [html] view plain copy print? <strong>class [Ljava.lang.String;
class [Ljava.lang.String;
class [Ljava.lang.String;
class [Ljava.lang.String;
class [Ljava.lang.String;</strong>
当时看成了String类型了,一看没错啊,怎么不对呢,找了会问题,才哗然大悟,form里面的参数其实是数组的,相同name提交后得到是参数是数组的数据,而且显示的class显示为String[]的,然后修改输出一看OK了 [java] view plain copy print? <strong>System.out.println(value.getClass()+"--"+JsonUtil.toJson(value));</strong>
[html] view plain copy print? <strong>class [Ljava.lang.String;--["22222"]
class [Ljava.lang.String;--[""]
class [Ljava.lang.String;--[""]
class [Ljava.lang.String;--["11111"]
class [Ljava.lang.String;--["3333"]</strong>

下面是详细代码,也可以在这里下载: http://download.csdn.net/detail/songylwq/4896548

[java] view plain copy print? <strong>package main.com.eca.interceptor;

import java.util.Iterator;
import java.util.Map;
import java.util.Set;

import org.apache.commons.lang.StringUtils;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;

public class TrimInterceptor implements Interceptor {
private static final long serialVersionUID = -2578561479301489061L;

public void destroy() {  
}  

/*  
 * @Description:拦截所有参数,去掉参数空格 
 * [@see](https://my.oschina.net/weimingwei) com.opensymphony.xwork2.interceptor.Interceptor#intercept(com.opensymphony.xwork2.ActionInvocation) 
 */  
public String intercept(ActionInvocation invocation) throws Exception {  
      
    Map map=invocation.getInvocationContext().getParameters();  
    Set keys = map.keySet();  
              Iterator iters = keys.iterator();  
            while(iters.hasNext()){  
                Object key = iters.next();  
                Object value = map.get(key);  
                map.put(key, transfer((String[])value));  
            }  
    return invocation.invoke();  
}  
  
/** 
 * @Description: 遍历参数数组里面的数据,取出空格 
 * [@param](https://my.oschina.net/u/2303379) params 
 * [@return](https://my.oschina.net/u/556800) 
 */  
private String[] transfer(String[] params){  
    for(int i=0;i<params.length;i++){  
        if(StringUtils.isEmpty(params[i]))continue;  
        params[i]=params[i].trim();  
    }  
    return params;  
}  

public void init() {  

}

转载于:https://my.oschina.net/ruanjun/blog/824731

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值