• struts2 在拦截器进行注入(依据Action是否实现自己定义接口)


    比如:经常在Action中都须要获取当前登录的User,就须要获取Session。然后从Session获取当前登录的User,由于这些步骤都是反复操作,能够想办法在拦截器中进行实现。能够自己定义一个接口。仅仅要你的Action实现了这个接口。就在自己定义拦截器中进行注入。

    即从拦截器中获取Session,然后设置进行注入。


    简单的样例:

    一个自己定义接口,仅仅要Action实现这个接口,就在拦截器中进行注入

    package com.atguigu.surveypark.struts2;
    
    import com.atguigu.surveypark.model.User;
    
    /**
     * 用户关注
     */
    public interface UserAware {
    	public void setUser(User user);
    }
    


    一个自己定义拦截器(登录拦截器):在拦截器中获取action的实例,假设实现上面的接口就进行注入。即调用接口的方法。


    package com.atguigu.surveypark.struts2.interceptor;
    
    import com.atguigu.surveypark.model.User;
    import com.atguigu.surveypark.struts2.UserAware;
    import com.atguigu.surveypark.struts2.action.BaseAction;
    import com.atguigu.surveypark.struts2.action.LoginAction;
    import com.atguigu.surveypark.struts2.action.RegAction;
    import com.opensymphony.xwork2.ActionInvocation;
    import com.opensymphony.xwork2.interceptor.Interceptor;
    
    /**
     * 登陆拦截器
     */
    public class LoginInterceptor implements Interceptor {
    
    	private static final long serialVersionUID = 4230211839075439660L;
    
    	public void destroy() {
    	}
    
    	public void init() {
    	}
    
    	@SuppressWarnings("rawtypes")
    	public String intercept(ActionInvocation arg0) throws Exception {
    		BaseAction action = (BaseAction) arg0.getAction();
    		if(action instanceof LoginAction
    				|| action instanceof RegAction){
    			return arg0.invoke();
    		}
    		else{
    			User user = (User) arg0.getInvocationContext().getSession().get("user");
    			if(user == null){
    				//去登陆
    				return "login" ;
    			}
    			else{
    				//放行
    				if(action instanceof UserAware){
    					//注入user给action
    					((UserAware)action).setUser(user);
    				}
    				return arg0.invoke();
    			}
    		}
    	}
    }
    

    Action:一个实现接口的Action

    package com.atguigu.surveypark.struts2.action;
    
    import java.util.List;
    
    import javax.annotation.Resource;
    
    import org.springframework.context.annotation.Scope;
    import org.springframework.stereotype.Controller;
    
    import com.atguigu.surveypark.model.Survey;
    import com.atguigu.surveypark.model.User;
    import com.atguigu.surveypark.service.SurveyService;
    import com.atguigu.surveypark.struts2.UserAware;
    
    /**
     * SurveyAction
     */
    @Controller
    @Scope("prototype")
    public class SurveyAction extends BaseAction<Survey> implements UserAware{
    
    	private static final long serialVersionUID = 2438909978838628762L;
    	
    	//注入SurveyService
    	@Resource
    	private SurveyService surveyService ;
    
    	//调查集合
    	private List<Survey> mySurveys ;
    
    	//接受user对象
    	private User user;
    	
    	public List<Survey> getMySurveys() {
    		return mySurveys;
    	}
    
    	public void setMySurveys(List<Survey> mySurveys) {
    		this.mySurveys = mySurveys;
    	}
    
    	/**
    	 * 查询我的调查列表
    	 */
    	public String mySurveys(){
    		this.mySurveys = surveyService.findMySurveys(user);
    		return "mySurveyListPage" ;
    	}
    	
    	/**
    	 * 新建调查
    	 */
    	public String newSurvey(){
    		this.model = surveyService.newSurvey(user);
    		return "designSurveyPage" ;
    	}
    
    	//注入User对象
    	public void setUser(User user) {
    		this.user = user ;
    	}
    }
    

    struts.xml:拦截器注冊

    <?

    xml version="1.0"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <!-- 主题 --> <constant name="struts.ui.theme" value="simple" /> <!-- 开发模式 --> <constant name="struts.devMode" value="true" /> <package name="surveyparkPkg" extends="struts-default" namespace="/"> <interceptors> <!-- 注冊登陆拦截器 --> <interceptor name="loginInterceptor" class="com.atguigu.surveypark.struts2.interceptor.LoginInterceptor" /> <!-- 定义拦截器栈 --> <interceptor-stack name="surveyparkStack"> <interceptor-ref name="loginInterceptor" /> <interceptor-ref name="defaultStack" /> </interceptor-stack> </interceptors> <!-- 定义默认栈 --> <default-interceptor-ref name="surveyparkStack" /> <!-- 定义全局结果 --> <global-results> <result name="login">/index.jsp</result> </global-results> <!-- regAction --> <action name="RegAction_*" class="regAction" method="{1}"> <result name="regPage">/reg.jsp</result> <result name="input">/reg.jsp</result> <result name="success">/index.jsp</result> </action> <!-- loginAction --> <action name="LoginAction_*" class="loginAction" method="{1}"> <result name="loginPage">/index.jsp</result> <result name="input">/index.jsp</result> <result name="success">/index.jsp</result> </action> <!-- SurveyAction --> <action name="SurveyAction_*" class="surveyAction" method="{1}"> <result name="mySurveyListPage">/mySurveyList.jsp</result> <result name="designSurveyPage">/designSurvey.jsp</result> </action> </package> </struts>




  • 相关阅读:
    [引用]SharePoint:在计算字段中使用Today, Me之类的函数的方法,有点搞笑,但是有效
    在infopath forms service 中自动保存而不用输入文件名
    MOSS的Sharepoint 列表中关于查阅项的处理
    Infopath Form Service示例:如何在InfoPath表单中引用SQL SERVER 中的数据?
    面对DNS劫持,只能坐以待毙吗?
    聚焦云原生,阿里云与 CNCF 共话「云未来,新可能」
    干货分享:细说双 11 直播背后的压测保障技术
    ALB Ingress 发布!轻松应对云原生应用流量管理
    如何用20分钟就能获得同款企业级全链路灰度能力?
    Serverless 架构模式及演进
  • 原文地址:https://www.cnblogs.com/jhcelue/p/6781182.html
Copyright © 2020-2023  润新知