SSH框架action注入service时,service时为null的解决方案(注解模式下)

本文介绍了解决Struts2+Spring+Hibernate框架中Service注入为null的问题。通过配置struts.xml文件并正确设置Action的class属性为Spring容器中的bean ID,成功实现了Service的注入。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近做一个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>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值