Java actionInvocation.invoke()没有调用该操作,而是给出空指针异常
我是Java的初学者。我想验证我的会话,如果不退出会话,任何人都无法登录。我是通过interceptor来实现这一点的,我创建了interceptor类,在该类中,如果会话对象为null,并且如果会话对象不等于null,那么它将调用操作,但是Java actionInvocation.invoke()没有调用该操作,而是给出空指针异常,java,struts2,Java,Struts2,我是Java的初学者。我想验证我的会话,如果不退出会话,任何人都无法登录。我是通过interceptor来实现这一点的,我创建了interceptor类,在该类中,如果会话对象为null,并且如果会话对象不等于null,那么它将调用操作,但是actionInvocation.invoke()不起作用,并且它会给出null指针异常 public class AuthenticationInterceptor implements Interceptor{ private static fi
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如果这是解决您问题的答案,您应该通过单击答案计票下的接受标记将其标记为接受。