Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java actionInvocation.invoke()没有调用该操作,而是给出空指针异常_Java_Struts2 - Fatal编程技术网

Java actionInvocation.invoke()没有调用该操作,而是给出空指针异常

Java actionInvocation.invoke()没有调用该操作,而是给出空指针异常,java,struts2,Java,Struts2,我是Java的初学者。我想验证我的会话,如果不退出会话,任何人都无法登录。我是通过interceptor来实现这一点的,我创建了interceptor类,在该类中,如果会话对象为null,并且如果会话对象不等于null,那么它将调用操作,但是actionInvocation.invoke()不起作用,并且它会给出null指针异常 public class AuthenticationInterceptor implements Interceptor{ private static fi

我是Java的初学者。我想验证我的会话,如果不退出会话,任何人都无法登录。我是通过interceptor来实现这一点的,我创建了interceptor类,在该类中,如果会话对象为null,并且如果会话对象不等于null,那么它将调用操作,但是
actionInvocation.invoke()
不起作用,并且它会给出null指针异常

public class AuthenticationInterceptor implements Interceptor{
    private static final long serialVersionUID = 1L; 

    public AuthenticationInterceptor() {
    }

    @Override
    public void destroy() {
    }

    @Override
    public void init() {
    }

    @Override
    public String intercept(ActionInvocation actionInvocation) throws Exception {
        String vString=null;
      try{
            HttpServletRequest request = (HttpServletRequest) actionInvocation.getInvocationContext().get(StrutsStatics.HTTP_REQUEST);
             HttpSession session = request.getSession();
             System.out.println(session.getAttribute(Constant.CURRENT_USER));
             UserDTO userDTO=(UserDTO) session.getAttribute(Constant.CURRENT_USER);

        if(userDTO == null){
            System.out.println("userdto=null"+userDTO);
            vString = "login";
        }
        else if(!(userDTO).equals(null)){
                System.out.println("userdto!!!=null"+userDTO.getUserId());

                System.out.println("test...   "+actionInvocation.invoke());
                vString= actionInvocation.invoke();
            }
        }catch (Exception e) {
            e.printStackTrace();
        }return vString;

        }

    private void addActionError(Object action, String message) {
        if (action instanceof ValidationAware) {
            ((ValidationAware) action).addActionError(message);
        }
    }

}
下面是xml文件

<interceptors>
            <interceptor name="authenticate" class="wm.com.erp.utility.AuthenticationInterceptor"/>

<interceptor-stack name="authenticateStack">
                <interceptor-ref name="authenticate"/>
            </interceptor-stack>
        </interceptors>

        <global-results>
            <result name="login" type="redirect">/index.jsp</result>
        </global-results>
<action name="Assignment" class="wm.com.erp.action.AssignmentAction" method="AssignmentList">
            <interceptor-ref name="authenticateStack"/>

            <result name="success">/Assignment.jsp</result>
            <result name="input">/home.jsp</result>
        </action>

/index.jsp
/Assignment.jsp
/home.jsp
非常感谢您的帮助。

Map session=invocation.getInvocationContext().getSession();
Map<String,Object> session = invocation.getInvocationContext().getSession();

if(session.isEmpty())
      return Action.ERROR; // session is empty/expired error must be redirect on

return invocation.invoke();
if(session.isEmpty()) 返回Action.ERROR;//会话为空/已过期错误必须在上重定向 返回invocation.invoke();

如果您有问题,请在此之后输入此代码,然后发布异常的堆栈跟踪

您好,欢迎使用StackOverflow。无论何时发布关于您收到的错误的信息,您都应该发布该错误的stacktrace。此外,您应该尝试以一种便于我们阅读的方式格式化代码(即删除任何注释掉的代码、空格、不相关的导入等)。否则我们很难帮助您。将
defaultStack
添加到您的拦截器堆栈中。当然可以。我下次会记住的。另外,删除与您的问题无关的代码
addActionError
@kapilDhunna如果这是解决您问题的答案,您应该通过单击答案计票下的接受标记将其标记为接受。