简单介绍利用Struts2 Interceptor处理实体类的公共属性

应用环境:在实际应用中,我们的业务实体类往往是通过继承一个基类,而这个基类包含了业务实体类的公共属性,比如创建者:creator,帐套:account,创建时间:createTime等等。下面,我们用struts2 interceptor来实现对公共属性的填充。

struts2 version:2.1.6 GA

1 Struts2 interceptor 实现:

-------------------------------------------------------------------------------------------------------

package com.abcdef.component.struts2;

import java.util.Map;

import com.abcdef.core.entity.PrimaryEntity;
import com.abcdef.system.entity.User;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.ModelDriven;
import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;

@SuppressWarnings("unchecked")
public class PrimaryEntityInterceptor extends MethodFilterInterceptor {
    private static final long serialVersionUID = 7224237874245817556L;
    private static final String EASY_LOCK = "lock";

    @Override
    protected String doIntercept(ActionInvocation ai) throws Exception {
        Map session = ai.getInvocationContext().getSession();
        if ("login".equals(ai.getProxy().getActionName())) {
            return ai.invoke();
        }
        User user = (User) session
                .get(com.easybea.core.util.Global.SESSION_ID_KEY_IN_COOKIE);
        if (user != null) {
            if (ai.getAction() instanceof ModelDriven) {
                ModelDriven action = (ModelDriven) ai.getAction();
                if (action.getModel() instanceof PrimaryEntity) {
                    PrimaryEntity T = (PrimaryEntity) action.getModel();
                    if ("1".equals(T.getLogicLock()))
                        return EASY_LOCK;
                    if (T.getAccount() == null || "".equals(T.getAccount())) {
                        T.setAccount(user.getAccount());
                        T.setCreator(user.getUserLogin());
                    } else {
                        T.setLastUpdate(user.getUserLogin());
                    }
                    //T.setLastLoginIp(user.getLastLoginIp());
                }
            }
            return ai.invoke();
        } else {
            return Action.LOGIN;
        }

    }
}

-------------------------------------------------------------------------------------------------------

2 在struts.xml中配置interceptor

-------------------------------------------------------------------------------------------------------

....

<interceptor name="primaryEntityInterceptor"
                class="com.abcdef.component.struts2.PrimaryEntityInterceptor" />

....

<interceptor-stack name="easybeaStack">
                <interceptor-ref name="paramsPrepareParamsStack" />
                <interceptor-ref name="defaultStack" />
                <interceptor-ref name="primaryEntityInterceptor">
                    <param name="includeMethods">save</param>
                    <param name="excludeMethods">
                        input,list,lock,unlock
                    </param>
                </interceptor-ref>
</interceptor-stack>

-------------------------------------------------------------------------------------------------------

3 一定不要忘记实现 <interceptor-ref name="paramsPrepareParamsStack" />,否则不能工作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值