login.jsp <s:form action="register" method="post">
<s:textfield name="user.username" label="用户名"/>
<s:password name="user.password" label="密码"/>
<s:submit value="注册"/>
<s:reset value="重填"/>
</s:form>struts.xml<package name="default" extends="struts-default">
<action name="register" class="action.RegisterAction">
<result name="success">/success.jsp</result>
</action>
ApplicationContext.xml<bean id="userDao" class="Realized.UserDaoHibernate" />
<bean id="User" class="bean.User"/><bean id="registerAction" class="action.RegisterAction"><property name="user" ref="User"/>
<property name="userDao" ref="userDao"/>
</bean>
RegisterAction.javapackage action;import javax.annotation.Resource;import bean.User;import com.opensymphony.xwork2.ActionSupport;import dao.UserDao;public class RegisterAction extends ActionSupport {
/**
*
*/
private static final long serialVersionUID = 1L;
private UserDao userDao;
public UserDao getUserDao() {
return userDao;
}
@Resource
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
private User user;
public User getUser() {
return user;
}
@Resource
public void setUser(User user) {
this.user = user;
}
public String execute() throws Exception
{
userDao.saveUser(user);
return SUCCESS;
}
}
<s:textfield name="user.username" label="用户名"/>
<s:password name="user.password" label="密码"/>
<s:submit value="注册"/>
<s:reset value="重填"/>
</s:form>struts.xml<package name="default" extends="struts-default">
<action name="register" class="action.RegisterAction">
<result name="success">/success.jsp</result>
</action>
ApplicationContext.xml<bean id="userDao" class="Realized.UserDaoHibernate" />
<bean id="User" class="bean.User"/><bean id="registerAction" class="action.RegisterAction"><property name="user" ref="User"/>
<property name="userDao" ref="userDao"/>
</bean>
RegisterAction.javapackage action;import javax.annotation.Resource;import bean.User;import com.opensymphony.xwork2.ActionSupport;import dao.UserDao;public class RegisterAction extends ActionSupport {
/**
*
*/
private static final long serialVersionUID = 1L;
private UserDao userDao;
public UserDao getUserDao() {
return userDao;
}
@Resource
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
private User user;
public User getUser() {
return user;
}
@Resource
public void setUser(User user) {
this.user = user;
}
public String execute() throws Exception
{
userDao.saveUser(user);
return SUCCESS;
}
}
把这个属性及相关的方法从Action中删除掉。
java.lang.NullPointerException
action.RegisterAction.execute(RegisterAction.java:34)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:441)
com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:280)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:243)
com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:165)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:252)
org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:122)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:179)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:235)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:89)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:130)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:126)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:138)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:165)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:179)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:488)
org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:395)
web.xml
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
public void setUser(User user) {
this.user = user;
}
这的 @Resource去掉呢
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
改成
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
试一下吧,好像被拦截器拦截了
然后改成*.action报错 在打开login.jsp时 The Struts dispatcher cannot be found.
public void setUser(User user) {
this.user = user;
}
把@Resource去掉,你的user对象是要从页面上获得,而不是用@Resource标签从spring依赖注入
<bean id="userDao" class="Realized.UserDaoHibernate" /><bean id="registerAction" class="action.RegisterAction" scope="prototype">
<property name="userDao" ref="userDao"/>
</bean>
来加载xml文件了么
{
ApplicationContext ctx=new ClassPathXmlApplicationContext("bean文件路径");
this.userDao = ctx.getBean("userDao");
userDao.saveUser();
return SUCCESS;
}
这样试试呢?
此插件用来整合Spring 与 Struts2
<package name="default" extends="struts-default">
<action name="register" class="registerAction">
<result name="success">/success.jsp</result>
</action>
这样的做法是你直接应用了spring的代理。
//个人认为应该把这两个注解都去掉,应为你已经在xml文件中注入了,就不需要了,只需要有set方法就可以
@Resource
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
private User user;
public User getUser() {
return user;
}
@Resource
public void setUser(User user) {
this.user = user;
}
public String execute() throws Exception
{
userDao.saveUser(user);
return SUCCESS;
}userDao.saveUser(user);
检查这一行
按报告来说 感觉是userDao的控制正 也不排除 user的空指针
实体还能注意给action 这个没用这样用过 运用感觉不是那么灵活
二种直接new :如下
public void setUser(User user) {
this.user = new User();
}
在setUser(User user )中new User();