NutzCN Logo
问答 为什么在动作链里面的process方法中用ActionContext对象的getMethod()方法获取出来的Method会是空的呢?
发布于 2900天前 作者 qq_96afb1c8 2072 次浏览 复制 上一个帖子 下一个帖子
标签:

用过滤器的match方法中的上下文对象getMethod就不是null的

7 回复

跟放入的位置有关, method对象是ModuleProcessor放进ActionContext

另外, Processor.init方法时已经可以拿到method, 不需要每次取. Processor对象, 是每个方法建一次的, 并非共享.

@wendal 没怎么看明白,是说我得重写init方法吗?我现在是想从执行的接口中获取方法上的注解然后做判断不通过的话会返回消息给前台。

public class TestProcessor extends AbstractProcessor {
    @Override
    public void process(ActionContext ac) throws Throwable {
        HttpServletRequest request = ac.getRequest();
        Method method = ac.getMethod();
        //Annotation[][] annotations = method.getParameterAnnotations();
        //获取方法参数上的注解做进一步判断和处理
        doNext(ac);

    }
}

在上下文对象中获取Method的时候是空的。如果我在init方法里获取那init方法里怎么获取request呢?

public class TestProcessor extends AbstractProcessor {

    private Method method;
    private Annotation[][] annotations;
    public void init(NutConfig config, ActionInfo ai) throws Throwable {
        this.method = ai.getMethod();
        annotations = method.getParameterAnnotations();
        // 及其他预处理...
    }
    @Override
    public void process(ActionContext ac) throws Throwable {
        HttpServletRequest request = ac.getRequest();
        //获取方法参数上的注解做进一步判断和处理
        // 取实例变量method和annotations做操作.
        doNext(ac);

    }
}

@wendal init()方法只有启动服务器的时候才进入,发送请求的时候并没有进去吖

init方法的时候把method相关的信息存起来, 在process的时候直接用, 而不是从ActionContext取method和注解

@wendal 存起来那我在process方法里的时候怎么知道当前前台请求的是哪个Module的哪个方法?

@qq_96afb1c8 每个方法都会有自己的Processor实例, 不同方法的Processor实例不会共享的.

添加回复
请先登陆
回到顶部