【Struts】Struts2自定义拦截器使用小记

本文介绍如何在Struts2中使用拦截器自动设置分页参数,并解决因拦截器顺序不当导致分页参数无效的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

刚用Struts2的拦截器实现了一个自动设置分页参数,

在要启用分页方法的前置执行翻页参数获得:

	@Before
    public void methodBefore(){
        //print("方法执行前");
        // 获取翻页参数
        Page rollPage = getPage();
        ContextHolder.setPage(rollPage);
    }

在方法后将分页参数清空:
	@After
    public void methodAfter(){
        //print("方法执行后");
        // 清理过期的翻页参数
        ContextHolder.removePage();
拦截器配置:

<package name="jsonPackage" extends="json-default">
        <interceptors>
            <!-- 配置注解拦截器 -->
            <interceptor name="annotationInterceptor" 
                         class="com.opensymphony.xwork2.interceptor.annotations.AnnotationWorkflowInterceptor"/>
            <interceptor-stack name="pageStack">                
                <interceptor-ref name="annotationInterceptor"/>
                <interceptor-ref name="defaultStack"/>
            </interceptor-stack>
        </interceptors>
    </package>
方法申明:

@Action(value = "queryUsers", interceptorRefs=@InterceptorRef("pageStack"),
            results = {@Result(name = "success", type = "json", params = {"root", "dataGirdData"})})
    public String queryUsers() {

设置好后发现翻页参数无法获得,总是使用默认值进行查询。

将拦载器去除,改用之前人工调用,一切正常;于是检查拦截器,最后发现在方法引用拦截器前加入

interceptorRefs={@InterceptorRef("defaultStack"),@InterceptorRef("pageStack")}

分页正常使用,于是想到是拦截器位置问题

    <package name="jsonPackage" extends="json-default">
        <interceptors>
            <!-- 配置注解拦截器 -->
            <interceptor name="annotationInterceptor"
                         class="com.opensymphony.xwork2.interceptor.annotations.AnnotationWorkflowInterceptor"/>
            <interceptor-stack name="pageStack">
                <interceptor-ref name="defaultStack"/>
                <interceptor-ref name="annotationInterceptor"/>
            </interceptor-stack>
        </interceptors>
    </package>


修改后翻页正常使用。
记录下来,免得下次再犯。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值