java - 拦截器的 invocation.invoke() 后未填充 Struts 2 Action 变量

标签 java variables struts2 action interceptor

我的问题是操作的变量在使用 invocation.invoke 从拦截器触发后未被填充。我所知道的是,在使用拦截器之前,它可以正常工作(从 .jsp 我提交了一个表单并调用了一个 Action 并填充了每个变量)

拦截器类:

public String intercept(ActionInvocation invocation) throws Exception {

    final ActionContext context = invocation.getInvocationContext();
    HttpServletRequest request = (HttpServletRequest) context.get(HTTP_REQUEST);
    HttpSession session = request.getSession(true);
    Object user = session.getAttribute(Constants.USER_HANDLE);

    if (user == null) {
        String signUp = request.getParameter(Constants.SIGN_UP);

        if (!StringUtils.isBlank(loginAttempt)) {
            if (processLoginAttempt(request, session)) {
                return "login-success";
            }
        } else if (!StringUtils.isBlank(signUp)) {
            return invocation.invoke();
        }
        return "login";
    } else {
        return invocation.invoke();
    }
}

Struts XML 文件:

<package name="defaultPackage" extends="struts-default">

    <interceptors>
        <interceptor name="login" class="com.spiddan.LoginInterceptor" />
        <interceptor-stack name="defaultStack">
            <interceptor-ref name="login"/>
        </interceptor-stack>
    </interceptors>

    <default-interceptor-ref name="defaultStack"/>
    <default-action-ref name="index"/>

    <global-results>
        <result name="login" type="redirect">/logIn.jsp</result>
        <result name="login-success" type="redirect">index</result>
    </global-results>

    <action name="addUserAction" class="com.spiddan.action.UserAction" method="addUser">
        <result name="input">/logIn.jsp</result>
        <result name="success">/index.jsp</result>
        <result name="error">/error.jsp</result>
    </action>

Action 类:

public class UserAction extends ActionSupport implements ModelDriven {

private User user;
private int tempGender;
private String confirmPassword;
private UserDAO userDAO;
private PasswordEncrypter passwordEncrypter;

public Object getModel() {
    return getUser();
}

public String addUser() throws Exception {

}

 //Getter and setters ect 

最佳答案

您在代码中仅指定了自定义拦截器,并排除了所有其他 Struts2 默认拦截器。试试这个:

<interceptors>
    <interceptor name="login" class="com.spiddan.LoginInterceptor" />
    <interceptor-stack name="defaultStackModified">  <!-- name doesn't override existing defaultStack-->
        <interceptor-ref name="defaultStack"/>       <!-- include the defaultStack this way--> 
        <interceptor-ref name="login"/>
    </interceptor-stack>
</interceptors>

关于java - 拦截器的 invocation.invoke() 后未填充 Struts 2 Action 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6384336/

相关文章:

python - 在 if 语句中初始化的变量的范围是什么?

jsp - 分页无法使用显示标签

java - 使用 Java AWT 将图像添加到面板

javascript - 设置全局变量并包装在 $(window).load 中

java - Desktop.Action.MAIL 为 mailto : in URI 正确编码主题和正文字符串

c - 我发现解决表达式有困难

java - 如何使用 Struts 2 打印 List<Object[]>?

java - HIbernate saveorUpdate() 更新时插入新记录

java - 如何在Docker容器中部署Spring应用程序?

java - 创建 Java 实例时 Eclipse 中出现错误