日期:2014-05-19  浏览次数:20829 次

在bean单态下,spring是怎么识别bean的状态
本帖最后由 promethous 于 2012-11-17 02:22:06 编辑 在ssh集成开发做登陆中,有点疑惑:
Action中的登陆方法如下:
@SuppressWarnings("unchecked")
public String login() {
Map session = ActionContext.getContext().getSession();
System.out.println("user:"+user.getFuEmail()+"--"+user.getFuPassword());
user = uBiz.login(user);
if (user != null) {
session.put("user", user);
return SUCCESS;
} else {
addFieldError("login_error", "用户名或密码错误!");
return INPUT;
}
}

spring配置文件的Action配置:
<!-- Action -->
<bean id="userac" class="com.action.UserAction" scope="prototype"></bean>
当scope="singleton"时,只要登录一次错误,后续就算输入正确也无法登陆成功,发现程序在输错误后没进login方法(单态下,bean只在初始化实例一次),改为protype多态下就可以(区别我明白),很疑惑的是:
spring会保存上一次bean的访问信息,但如果先输正确一次,记录了正确的bean,接着输错误一次,却没有用上一次正确登陆的bean,spring容器单态下,如何识别错误登陆并加以记录到bean,以致后续错误登陆后直接访问了记录了错误登陆的bean而不进入Action直接访问?
------最佳解决方案--------------------
楼主,你使用spring注入的是com.action.UserAction,scope="singleton" 一起请求就添加一次错误消息,不断的累积起来,  这和你每登录一次,action接收一个新的User对象没关系啊,scope="singleton" 之后登不进去是因为该单例action 中存在错误消息,返回至INPUT页面。
------其他解决方案--------------------
引用:
引用:楼主,你使用spring注入的是com.action.UserAction,scope="singleton" 一起请求就添加一次错误消息,不断的累积起来,  这和你每登录一次,action接收一个新的User对象没关系啊,scope="singleton" 之后登不进去是因为该单例action 中存在错误消息,返回至INPU……

这个跟spring 没有半毛钱的关系,spring 在这里主要用于注入对象,至于Actino 识别错误消息,应该是拦截器控制的,我没有看源码,估计是的。
------其他解决方案--------------------
自顶,难道需要看源码?
------其他解决方案--------------------
用户登录输入的user,是由action接收的,每接收一次就new 一个新的User。。 这和Action单例 多例没有关系。
------其他解决方案--------------------
引用:
楼主,你使用spring注入的是com.action.UserAction,scope="singleton" 一起请求就添加一次错误消息,不断的累积起来,  这和你每登录一次,action接收一个新的User对象没关系啊,scope="singleton" 之后登不进去是因为该单例action 中存在错误消息,返回至INPUT页面。

我想问的就是,spring容器怎么识别Action中存在错误消息的?是addFieldError?