• 拦截器-注解


    首先定义我们自己的Interceptor

    package com.web.interceptor;
    
    import javax.servlet.http.HttpServletRequest;
    import org.apache.struts2.StrutsStatics;
    import org.apache.struts2.convention.annotation.ParentPackage;
    
    import com.common.utils.StringUtil;
    import com.opensymphony.xwork2.ActionContext;
    import com.opensymphony.xwork2.ActionInvocation;
    import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
    import com.opensymphony.xwork2.util.ValueStack;
    import com.web.action.Constants;
    
    @ParentPackage(value="struts-default")
    public class LoginInterceptor extends AbstractInterceptor
    {
        /**
         * 
         */
        private static final long serialVersionUID = 1L;
    
        public static final String USER_SESSION_KEY="wallet.session.user";
        
        public void init()
        {}
        
        @SuppressWarnings("unchecked")
        @Override
        public String intercept(ActionInvocation invocation) throws Exception
        { 
            ActionContext actionContext = invocation.getInvocationContext();
            HttpServletRequest request = (HttpServletRequest) actionContext.get(StrutsStatics.HTTP_REQUEST);
    
            String uri = request.getRequestURI();
            if(uri.indexOf("index.action")>-1)
            {
                return Constants.INPUT; 
            }
            else if(uri.indexOf("login.action")>-1)
            {
                ValueStack vt = actionContext.getValueStack();
                java.util.Map<String, Object> mp = vt.getContext();
                
                java.util.Map<String, Object> paraMap = (java.util.Map<String,Object>)mp.get(ActionContext.PARAMETERS);
                String[] name = (String[])paraMap.get("user.name");
             
                //String name = (String)vt.findValue("user.name");
                if(name!=null && name.length>0 && !StringUtil.hasContent(name[0]))
                {
                    vt.set("fielderror", "必须输入用户名!");
                    return Constants.INPUT;
                }
                else return invocation.invoke();
            }
            else
                return invocation.invoke();
        }
    
        public void destroy()
        {}
    }

    将其注册到struts中,修改struts2.xml文件增加如下内容

    <package name="struts-interceptor" extends="struts-default">
            <interceptors>
                <interceptor name="loginInterceptor" class="com.web.interceptor.LoginInterceptor"/>
            </interceptors>
        </package>
    这样我们自己定义的Interceptor已经设置完成,如果想使用则可以用annotation指定。如

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

    @InterceptorRefs({ @InterceptorRef(
    "loginInterceptor"), @InterceptorRef("defaultStack") }) @ParentPackage(value="struts-interceptor") @Namespace(value="/application") @Result(name="input",location="/application/login.jsp") public class LoginAction extends BaseAction { private static final long serialVersionUID = 1L; }

    我们在LoginAction里使用了刚刚自定义的Interceptor。

    官网教程提供的解决方案:

    引用


    If you get errors like "Unable to find interceptor class referenced by ref-name XYZ". This means that the package where Convention is placing your actions, does not extend the package where the interceptor is defined. To fix this problem either 1)Use @ParentPackage annotation(or struts.convention.default.parent.package) passing the name of the package that defines the interceptor, or 2) Create a package in XML that extends the package that defines the interceptor, and use @ParentPackage(or struts.convention.default.parent.package) to point to it.

  • 相关阅读:
    简单理解jQuery中$.getJSON、$.get、$.post、$.ajax用法
    适配器模式(Adapter Pattern)
    什么样的登录框才算是优秀的?
    transient的作用及序列化
    MySQL索引实现原理
    concurrentHashMap原理分析和总结(JDK1.8)
    HashMap实现原理(JDK1.8)
    深入理解Java中的IO
    多线程系列
    多线程系列
  • 原文地址:https://www.cnblogs.com/sandea/p/3754062.html
Copyright © 2020-2023  润新知