public class LoginAction extends ActionSupport {
/**
*
*/
private static final long serialVersionUID = -3017631247469843290L;
private User userModel;
private IUserService userService;
public String Login() throws Exception {
String _email = getUserModel().getEmail();
String _pwd = getUserModel().getPwd();
//
if (userService.ValidateUser(_email, _pwd)) {
ActionContext.getContext().getSession().put("K_UserName", _email);
return "OK";
} else
return "False";
}
public String Register() {
return "Register";
}
public void setUserModel(User userModel) {
this.userModel = userModel;
}
public User getUserModel() {
return userModel;
}
public void setUserService(UserService userService) {
this.userService = userService; (这句在初使化时是可以注入的)
}
}
但在运行时这句: if (userService.ValidateUser(_email, _pwd)) {,
userService总为Null,不知道为什么
源代码如何修改:
1 把UserService类中和_userDAO有关的代码先注释,ValidateUser方法改成下面的
[code="java"] public boolean ValidateUser(String name, String p_pwd) {
if ("hello".equals(name) && "world".equals(p_pwd)) {
return true;
} else {
return false;
}
}[/code]
2 spring-Service.xml
先不加和DAO相关的属性,定义成下面的方式
[code="java"] [/code]
3 spring-WEB.xml
bean定义改成scope="prototype",对每个请求生成一个Action
[code="java"]
[/code]
4 struts.xml
[code="java"] [/code]
把上面一行改成
[code="java"][/code]
class的值和spring里面的bean id一致。
5 保证在WEB-INF/lib下加入struts2-spring-plugin-2.1.8.1.jar和spring.jar包。
这样就应该没有问题了。
不应该啊。
记log调一下。
[code="java"] public String Login() throws Exception {
String _email = getUserModel().getEmail();
String _pwd = getUserModel().getPwd();
log.error("2:" + userService);
//
if (userService.ValidateUser(_email, _pwd)) {
ActionContext.getContext().getSession().put("K_UserName", _email);
return "OK";
} else
return "False";
}
public void setUserService(UserService userService) {
this.userService = userService; (这句在初使化时是可以注入的)
log.error("1:" + this.userService);
}[/code]
[quote]我是在调试的时候,跟踪的,有没有可能是配置文件的问题?[/quote]
注入应该是在调用方法前面的,对这个问题,我也觉得奇怪。
你可以贴贴你的配置,最好有调试信息。我还是觉得不应该。
源码文件我看了下,不好调试,只能大概说一下:
1 确定Spring注入成功了吗,证据是什么?
2 Spring和Struts 2整合有两个方式,一种是Spring产生Action,然后在struts.xml文件中引用,另外一种是使用自动装配的方式,不知道你采用的是哪一种?
如果采用的第一种
struts.xml中action的配置就应该是
[code="java"]
signin.jsp
Home.jsp?${UserName}
error.jsp
reg.jsp
exception="java.lang.Exception.Exception">
/error.jsp
[/code]
上面action的class值应该是Spring配置文件中产生的bean id。因为我看你的spring的配置文件生成这个action了,所有估计你应该是采用的第一种方法。
源代码如何修改:
1 把UserService类中和_userDAO有关的代码先注释,ValidateUser方法改成下面的
public boolean ValidateUser(String name, String p_pwd) {
if ("hello".equals(name) && "world".equals(p_pwd)) {
return true;
} else {
return false;
}
}
2 spring-Service.xml
先不加和DAO相关的属性,定义成下面的方式
<bean class="lf.Services.UserService" id="userService" />
3 spring-WEB.xml
bean定义改成scope="prototype",对每个请求生成一个Action
4 struts.xml
把上面一行改成
class的值和spring里面的bean id一致。
5 保证在WEB-INF/lib下加入struts2-spring-plugin-2.1.8.1.jar和spring.jar包。
我试过没有问题。