最近做一个Java项目,老板要求使用SSH框架,然后就开始自学SSH。但是在使用action注入service的时候,出现了一个service为null的情况下,在查找资料之后,首先在struts.xml添加一个属性
<constant name="struts.objectFactory" value="spring" />
然后,debug模式打开tomcat,还是null。之后想了一下,是不是action的class问题。因为我已经将Action使用@Component("login")注解为bean,这个时候应该使用spring容器里面的id,这个id就是前面的login。所以class这个class属性应该使用login,而不是com.qigetech.user.action.LoginAction。这样子问题就解决了。
记录一下,以备查看。
package com.qigetech.user.action;
import java.util.Map;
import java.util.UUID;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.interceptor.SessionAware;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.qigetech.user.constant.CommonConstant;
import com.qigetech.user.po.User;
import com.qigetech.user.service.IUserService;
@Component("login")
@Scope("prototype")
@SuppressWarnings("serial")
public class LoginAction extends ActionSupport implements SessionAware{
private String username;
private String password;
private IUserService userService;
private Map<String,Object> session;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public IUserService getUserService() {
return userService;
}
@Resource(name="iUserServiceImpl")
public void setUserService(IUserService userService) {
this.userService = userService;
}
public Map<String, Object> getSession() {
return session;
}
public void setSession(Map<String, Object> session) {
this.session = session;
}
public String login() {
System.out.println(username);
System.out.println(password);
User user = userService.findUser(username, password);
ActionContext ac = ActionContext.getContext();
HttpServletRequest request = (HttpServletRequest)ac.get(ServletActionContext.HTTP_REQUEST);
System.out.println(user);
if(user == null) {
session.put(CommonConstant.LOGIN_TOKE, UUID.randomUUID().toString().replace("-", ""));
session.put("name", username);
return SUCCESS;
}else {
request.setAttribute("message", "账号或密码错误");
return ERROR;
}
}
}
<package name="user" namespace="/user" extends="struts-default">
<!-- class属性的内容对应spring容器中的Action的id值,(例如@Component("login")) -->
<action name="login" class="login" method="login">
<result name="success">/jsp/quartz/listjob.jsp</result>
<result name="error">/jsp/user/login.jsp</result>
</action>
<action name="choice" class="choice" method="login">
<result name="login">/jsp/user/login.jsp</result>
</action>
</package>