当前位置: 首页 > 面试题库 >

Struts2 / Spring-即使通过验证后也不执行调用

陆子航
2023-03-14
问题内容

我在设置时遇到问题,我的登录名已通过验证,但未调用execute函数

LoginAction.java:

@Override
public String execute() throws Exception {

    System.out.println("5");
    String username = blogUser.getUsername();
    String password = blogUser.getPassword();
    blogUser = blogUserService.getUserByLogin(username, password);
    System.out.println("6");
    sessionMap.put(Constants.SESSION_USERNAME, blogUser.getUsername());
    System.out.println("7");
    sessionMap.put(Constants.SESSION_USERID, blogUser.getUserId());
    System.out.println("return:success");
    return SUCCESS;
}

@Override
public void validate() {
    System.out.println("1");
    String username = blogUser.getUsername();
    String password = blogUser.getPassword();
    System.out.println("username:"+username + ", password:"+password);
    if (username == null & password == null) {
        System.out.println("22");
        addFieldError("blogUser.username","");
    } else if (username == null || password == null) {
        System.out.println("2");
        addFieldError("blogUser.username","Invalid Login");
    } else if (!blogUserService.checkLogin(username, password)) {
        System.out.println("3");
        addFieldError("blogUser.username","Invalid Login");
    }
    System.out.println("4");
}

public String postLogin() throws Exception {
    System.out.println("77");
    return LOGIN;
}

struts.xml:

    <action name="login" class="loginActionBean" >
        <result name="input" type="tiles">/login.tiles</result>
        <result name="none" type="tiles">/login.tiles</result>
        <result name="login" type="tiles">/login.tiles</result>
        <result name="success" type="redirectAction">postPreviewAction</result>
        <result name="error" type="tiles">/login.tiles</result>
    </action>

    <action name="doLogin" class="loginActionBean" method="postLogin">
        <result name="login" type="tiles">/login.tiles</result>
        <result name="input" type="redirectAction">login</result>
    </action>

login.jsp:

<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<div>
    <h2>Users Login</h2>
    <s:form action="login" method="post">
        <s:textfield label="Username" name="blogUser.username" />
        <s:password label="Password" name="blogUser.password" />
        <s:submit value="Login" />
    </s:form>
</div>

我只能看到“ 4”被打印(意味着它已通过验证),仅此而已,它并没有转到“ 5”

编辑: 添加了tiles.xml代码段

<definition name="/login.tiles" extends="baseLayout">
    <put-attribute name="body" value="/login.jsp" />
</definition>

问题答案:

从Struts2 Spring插件文档中:

通常,在struts.xml中,为每个Action指定类。使用default时SpringObjectFactory,框架将要求Spring创建Action并按照默认的自动装配行为指定的方式装配依赖项。

这意味着您无需从动作中创建Spring bean。

但是,有时您可能希望Spring完全管理该bean。例如,如果您希望将更复杂的AOP或启用Spring的技术(例如Acegi)应用于bean,这将很有用。为此,您要做的就是在Spring
applicationContext.xml中配置bean,然后从struts.xml中的Action更改class属性,以使用Spring中定义的bean名称而不是类名称。

Struts2本身会为每个请求创建新的操作实例,因此操作不是单例。如果您无法正常使用创建Spring
Bean,请为其提供适当的名称scope(例如scope="prototype"),因为:

默认情况下,bean将是一个singleton,除非该bean有一个父bean定义,在这种情况下它将继承父bean的作用域。

loginActionBean声明例子:

<bean id="loginActionBean" class="some.package.LoginActionBean" scope="prototype" />


 类似资料:
  • 问题内容: 我使用Struts2 + JSP + Tomcat6+Hibernate+Mysql作为我的J2EE应用程序框架。按照这个]主题,我遇到了出现此错误的问题: 看来是由于mysql在n小时后关闭了它的连接。当人们回答时,我更改了hibernate配置以通过JNDI获得数据库连接。这是我采取的操作步骤: 我的hibernate.cfg.xml: 我放入META-INF详细信息中的conte

  • 问题: 我们有一个spring的基于MVC的RESTful API,它包含敏感信息。API应该是安全的,但是不希望在每个请求中发送用户的凭据(User/Pass组合)。根据REST指南(和内部业务需求),服务器必须保持无状态。API将由另一台服务器以混搭方式使用。 要求: > 客户端请求使用凭据(不受保护的URL);服务器返回一个安全令牌,该令牌包含足够的信息,供服务器验证未来的请求并保持无状态。

  • 在尝试使用JavaFX和Jakarta Mail构建电子邮件客户机时,我希望实现一个连接测试,以确保用户输入的凭据实际适用于他们指定的IMAP和SMTP服务器。到目前为止,我对验证IMAP凭据没有任何问题。 对于我的SMTP验证代码,我在internet上搜索了一个可行的方法,遇到了这个问题,并在我的项目中实现了它,如下所示: 我在上面提到的问题似乎表明,这应该可以证明这些证书是有效的。但是,到目

  • 我正在制作一个简单的表单,并为每个字段制作了一个函数来验证。但是当我通过live server测试表单时,即使字段没有验证,表单也会提交。除此之外,每个函数似乎都能按预期工作。 这是HTML

  • 问题内容: 我正在尝试通过jQuery向Struts2操作类发送AJAX发布请求,以处理表单并接收JSON响应,但是我还没有弄清楚该怎么做。 首先,我制作了表单,并设置了Struts使其可以在没有JavaScript的情况下工作(尝试进行渐进式增强),现在我试图通过jQuery使它工作。我可以轻松地创建一个新的servlet,该servlet调用动作类的validate和execute方法并在其中

  • 我正在尝试根据通用模板生成新的excel文件。我正在打开模板excel文件,编辑它并将其保存在新位置。要编写文件,我正在使用FileOutputStream,并且我在编写后关闭流以保存它。整个过程正常工作,但新创建的excel文件没有正确保存。我的模板文件为35kb,我新创建的excel文件仅显示30kb。当我打开新创建的excel文件时,我可以看到写入的数据,我需要保存并关闭它以反映正确的36k