Struts 的Action问题

发布于 2021-12-04 09:54:42 字数 1912 浏览 805 评论 10

编写了一个简单的登录页面,在action进行校验,然后在页面中有一个


<div><font color="red"><s:actionerror /></font></div>

用来struts提示错误信息使用,下面是action中的方法:

String code = (String) ServletActionContext.getRequest().getSession().getAttribute("checkcode");
		if(code.equals(checkcode)) {
			List<User> list = userService.login(loginname, password);
			if(list == null || list.size() == 0) {
				this.addActionError("用户名或密码错误!");
				return LOGIN;
			}
			ServletActionContext.getRequest().getSession().setAttribute("user", list.get(0));
			List<Menu> menuList =  (List<Menu>) ServletActionContext.getRequest().getSession().getAttribute("menuList");
			if(menuList == null) {
				menuList = menuService.getNeed(0);
				ServletActionContext.getRequest().getSession().setAttribute("menuList", menuList);
			}
		}else {
			this.addActionError("验证码错误!");
			return LOGIN;
		}
		return "loginSuccess";



struts中的配置:

<action name="user_*" class="userAction" method="{1}">
			<result name="login">/jsp/login.jsp</result>
			<result name="loginSuccess">/jsp/index.jsp</result>
			<result name="input">/jsp/login.jsp</result>
		</action>
		
		<action name="index" class="indexAction">
			<result>/jsp/login.jsp</result>
		</action>



然后,当我访问index.action,跳转到login.jsp,第一次点击表单提交的时候,是可以成功的运行,如果信息都正确,正确跳转到相应页面, 如果有错误,错误信息也正确显示,但是显示了错误信息之后,页面运行了user_login.action,因为错误所以依然返回到login.jsp,再次填写表单,就会一直报错,一直显示刚刚的错误信息,地址栏是user_login.action,请问这个应该怎么解决?






如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(10

月亮是我掰弯的 2021-12-04 14:37:47

回复
信息错误之后再填写提交 可以执行到login方法里么

蓝颜夕 2021-12-04 14:37:47

是的呀,第一次提交能进入这个方法执行,成功了也能成功跳转,失败了也能显示错误信息,但是再填信息就不会变了.

苍暮颜 2021-12-04 14:37:47
package com.auth.action;

import java.util.List;

import javax.annotation.Resource;

import org.apache.struts2.ServletActionContext;
import org.springframework.stereotype.Component;

import com.auth.entity.Menu;
import com.auth.entity.User;
import com.auth.service.MenuService;
import com.auth.service.UserService;
import com.opensymphony.xwork2.ActionSupport;

@Component
public class UserAction extends ActionSupport {
	public String loginname;
	public String password;
	private String checkcode;

	public String getCheckcode() {
		return checkcode;
	}

	public void setCheckcode(String checkcode) {
		this.checkcode = checkcode;
	}

	public String getLoginname() {
		return loginname;
	}

	public void setLoginname(String loginname) {
		this.loginname = loginname;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	@Resource
	private UserService userService;
	
	@Resource
	private MenuService menuService;

	public String login() {
		String code = (String) ServletActionContext.getRequest().getSession().getAttribute("checkcode");
		if((code.toUpperCase()).equals((checkcode.toUpperCase()))) {
			List<User> list = userService.login(loginname, password);
			if(list == null || list.size() == 0) {
				this.addActionError("用户名或密码错误!");
				return LOGIN;
			}
			ServletActionContext.getRequest().getSession().setAttribute("user", list.get(0));
			List<Menu> menuList =  (List<Menu>) ServletActionContext.getRequest().getSession().getAttribute("menuList");
			if(menuList == null) {
				menuList = menuService.getNeed(0);
				ServletActionContext.getRequest().getSession().setAttribute("menuList", menuList);
			}
		}else {
			this.addActionError("验证码错误!");
			return LOGIN;
		}
		return "loginSuccess";
	}
	
}

打了断点了,第一次启动服务的时候可以进入方法,然后如果登录失败重新登录,就不会再进入这个方法了.

噩梦成真你也成魔 2021-12-04 14:37:45

不可以,不会再进入user_login.action了

不乱于心 2021-12-04 14:37:44

回复
提交一次错误之后, 用浏览器看看 此时的aciton是指向哪的, 如果正常指向 不应该进不到login里啊

兮颜 2021-12-04 14:37:37

终于解决了 因为spring给Action的bean是单例模式,改成prototype就可以.

醉生梦死 2021-12-04 14:36:21

userAction的整个类贴出来看看

三月梨花 2021-12-04 14:36:02

不行,我感觉是不是缓存的原因 <result name="login" type="redirect">/jsp/login.jsp</result> <!-- 重定向到下面的index.action --> <result name="login" type="redirect">index</result> 这两种配置都不可以,后台打了断点,方法就不会再进去了. 相当于只进入一次.

凯凯我们等你回来 2021-12-04 13:21:45

<result name="login" type="redirect">/jsp/login.jsp</result>

这里的跳转类型改成重定向的方式跳转

为你鎻心 2021-12-04 12:59:04

Action上面要用@Scope("prototype"),使用单例模式会出现错误.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文