是用Struts2(struts2-core-2.1.8.jar)、Spring(spring-core-2.5.6.jar)整合,使用Spring管理Struts的Action,出现了一些问题。
1、使用Spring注入的业务逻辑代码,错误提示如下:
java.lang.NullPointerException cn.nmg.archives.action.LoginAction.execute(LoginAction.java:36)
36行代码为:
User user = sm.validLogin(name, password);
2、没有使用Spring注入的业务逻辑代码,直接在action中处理jsp页面传入的参数,出现以下错误:
No result defined for action cn.nmg.archives.action.LoginAction and result success
struts.xml片段如下
<package name="SysManage" extends="struts-default"> <action name="login" class="loginAction"> <result name="success">/sys/main.jsp</result> <result name="login">/login.jsp</result> </action> </package>
jsp文件中调用action代码如下:
<form id="form1" action="login.action" method="post">
</form>
错误分析:Spring针对Struts的注入失败,就算是手动将需要注入的业务逻辑代码new出来,错误依旧。
解决:问题出在了struts.xml配置上,正确的应为:
<package name="SysManage" extends="struts-default" namespace="/sys"> <action name="login" class="loginAction"> <result name="success">/sys/main.jsp</result> <result name="login">/login.jsp</result> </action> </package>
对应的调用代码为:
<form id="form1" action="sys/login.action" method="post">
</form>
或者
<package name="SysManage" extends="struts-default" namespace="/"> <action name="login" class="loginAction"> <result name="success">/sys/main.jsp</result> <result name="login">/login.jsp</result> </action> </package>
对应的调用代码为:
<form id="form1" action="login.action" method="post">
</form>
原因:namespace="/"弄错了,需要配置上,根据配置不同,调用action的代码也要修改才好。