jsp - 使用消息存储拦截器进行 Struts 2 验证

标签 jsp jakarta-ee struts2 struts-validation struts2-interceptors

我有一个尝试让用户登录的操作。

public class RegisteredUserAction extends ActionSupport implements SessionAware {
..
..
 public String login() throws Exception {

        DBLogic dBLogic = new DBLogic();
        RegisteredUser user = null;
        try {
            user = dBLogic.getRegisteredUser(getUserUsername(), getUserPassword());
        } catch (CredentialException e) {
            addFieldError("userUsername", e.getMessage());

            addActionError(e.getMessage());
            return INPUT;
        }

        if (user != null) {
            session.put("user", user);
            return SUCCESS;
        }

        return ERROR;
    }
}

如您所见,如果用户名或密码无效,我会抛出 CredentialException,然后在我的 fieldError 中填充该异常消息。我什至尝试添加一个操作错误。

通过一些建议和在线搜索,我设法使用消息存储拦截器使用 RegisteredUserAction.action 和 MainAction.action 中的注释分别存储和获取。
import org.apache.struts2.convention.annotation.InterceptorRef;
import org.apache.struts2.convention.annotation.InterceptorRefs;
@InterceptorRefs({
    @InterceptorRef(value = "store", params = {"operationMode", "STORE"}),
    @InterceptorRef("defaultStack"),})


import org.apache.struts2.convention.annotation.InterceptorRefs;

@InterceptorRefs({
    @InterceptorRef(value = "store", params = {"operationMode", "RETRIEVE"}),
    @InterceptorRef("defaultStack"),})

这是相关的 struts.xml 文件内容:

<package name="pages" extends="struts-default" namespace="/">
        <global-results>
            <result name="displayPage">/WEB-INF/template/page.jsp</result>
            <result name="input">/WEB-INF/template/page.jsp</result>
        </global-results>
        <action name="registrationPage" class="actions.MainAction" 
              method="loadRegistrationPage"></action>
        <action name="loginPage" class="actions.MainAction" 
              method="loadLoginPage"></action>
</package>

<package name="operations" extends="struts-default" namespace="/">

        <action  name="userLogin" class="actions.RegisteredUserAction" method="login">
            <result type="redirect" name="input">loginPage.action</result>
            <result type="redirect" name="success">homePage.action</result>
        </action>
</package>

我正在使用基于模板的方法,其中中间内容(在我的例子中是 LoginPage.jsp)被动态地包含到主页中。

我的 page.jsp(包括 mainContent):

<s:include value="../%{mainContent}.jsp" ></s:include>

我的 login.jsp(包括在内):

<%@taglib prefix="s" uri="/struts-tags"%>

<s:form action="userLogin" method="POST">
    <s:textfield name="userUsername" />Error:<s:fielderror name="userUsername" />
    <s:password name="userPassword" />
    <s:submit />
</s:form>

重定向工作正常,登录表单出现,但没有错误。
我什至尝试过在 struts.xml 中使用消息存储拦截器,但没有成功。 :(

最佳答案

使用 redirectAction结果而不是 redirect .并尝试使用 struts.xml 中的配置文件而不是注释。

<action name="userLogin" class="actions.RegisteredUserAction" method="login">
   <interceptor-ref name="store">
      <param name="operationMode">STORE</param>
   </interceptor-ref>
   <interceptor-ref name="defaultStack" />
   <result type="redirectAction" name="input">loginPage</result>
   <result type="redirectAction" name="success">homePage</result>
</action>

关于jsp - 使用消息存储拦截器进行 Struts 2 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13414543/

相关文章:

java - 如何在 Struts 2 的单个 View 中使用多个表单/操作

javascript - 在 javascript 中评估条件时出现问题

JavaScript 无法在 JSP 中正确生成 HTML

java - 对于 Hazelcast 来说,一张大 map 和多张小 map 哪个更好?

Java继承

css - 无法使用 struts 2 在图 block 中添加多个 css 文件

java - Struts 2 中的 ModuleConfig 和 PluginConfig

javascript - 使用 Jquery 禁用特定列的 click fot td

javascript - 想要一个确认框,如果你想使用jsp和java脚本删除数据

java - 多态 JPA 查询