编写了一个简单的登录页面,在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";
<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>
Action上面要用@Scope("prototype"),使用单例模式会出现错误.
<spanstyle="color:#333333;font-family:Helvetica,Tahoma,Arial,sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;"><result<spanstyle="font-family:Consolas,'BitstreamVeraSansMono','CourierNew',Courier,monospace;font-size:14px;line-height:15.4px;background-color:#FFFFFF;">name="login"<spanstyle="color:#333333;font-family:Helvetica,Tahoma,Arial,sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">type="redirect">/jsp/login.jsp</result>
<spanstyle="color:#333333;font-family:Helvetica,Tahoma,Arial,sans-serif;font-size:14px;line-height:24px;background-color:#F5F5F5;">这里的跳转类型改成重定向的方式跳转
不行,我感觉是不是缓存的原因<resultname="login"type="redirect">/jsp/login.jsp</result><!--重定向到下面的index.action--><resultname="login"type="redirect">index</result>这两种配置都不可以,后台打了断点,方法就不会再进去了.相当于只进入一次.userAction的整个类贴出来看看终于解决了因为spring给Action的bean是单例模式,改成prototype就可以.回复<aclass='referer'target='_blank'>@丶KKdo:提交一次错误之后,用浏览器看看此时的aciton是指向哪的,如果正常指向不应该进不到login里啊不可以,不会再进入user_login.action了回复<aclass='referer'target='_blank'>@丶KKdo:信息错误之后再填写提交可以执行到login方法里么是的呀,第一次提交能进入这个方法执行,成功了也能成功跳转,失败了也能显示错误信息,但是再填信息就不会变了.<preclass="brush:java;toolbar:true;auto-links:false;">packagecom.auth.action;importjava.util.List;importjavax.annotation.Resource;importorg.apache.struts2.ServletActionContext;importorg.springframework.stereotype.Component;importcom.auth.entity.Menu;importcom.auth.entity.User;importcom.auth.service.MenuService;importcom.auth.service.UserService;importcom.opensymphony.xwork2.ActionSupport;@ComponentpublicclassUserActionextendsActionSupport{publicStringloginname;publicStringpassword;privateStringcheckcode;publicStringgetCheckcode(){returncheckcode;}publicvoidsetCheckcode(Stringcheckcode){this.checkcode=checkcode;}publicStringgetLoginname(){returnloginname;}publicvoidsetLoginname(Stringloginname){this.loginname=loginname;}publicStringgetPassword(){returnpassword;}publicvoidsetPassword(Stringpassword){this.password=password;}@ResourceprivateUserServiceuserService;@ResourceprivateMenuServicemenuService;publicStringlogin(){Stringcode=(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("用户名或密码错误!");returnLOGIN;}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("验证码错误!");returnLOGIN;}return"loginSuccess";}}打了断点了,第一次启动服务的时候可以进入方法,然后如果登录失败重新登录,就不会再进入这个方法了.
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。