Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 975|回复: 0

/Struts2+hibernate3+spring2 dao方法报空指针错误,请各位帮忙,不

[复制链接]

该用户从未签到

发表于 2011-11-1 11:42:07 | 显示全部楼层 |阅读模式
    本人yongStruts2+hibernate3+spring2 做一个简单的往数據库表單添加记錄的测试时出现的问题:
    在 applicationContext.xml -----(因为yongmyeclipseshengcheng这个)----實际上就是hibernateDe配置XML文jian
    中:
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
    <!-- Description:main configure file for database,hibernate, dataBean, and dataAccess(DAO)-->
    <!-- configue the data source, later loaded to data factory below -->
    <bean id="DataSource" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="org.postgresql.Driver"></property>
    <property name="url" value="jdbc:postgresql://localhost:5432/project"></property>
    <property name="username" value="postgres"></property>
    <property name="password" value="TAUBRISS"></property>
    </bean>
    <!-- construct the data factory -->
    <bean id="SessionFactory"
    class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <!-- load data source -->
    <property name="dataSource">
    <ref bean="DataSource" />
    </property>
    <!-- define the relationship between hibernate and database(here: hibernate-postgresql) -->
    <property name="hibernateProperties">
    <props>
    <prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop>
    </props>
    </property>
    <!-- bean file start mapping here -->
    <property name="mappingResources">
    <list>
    <value>com/project/beans/KeywordTbl.hbm.xml</value>
    <value>com/project/beans/AuthorNewsTbl.hbm.xml</value>
    <value>com/project/beans/PubauthorrelationTbl.hbm.xml</value>
    <value>com/project/beans/AuthorTbl.hbm.xml</value>
    <value>com/project/beans/UserTbl.hbm.xml</value1>
    <value>com/project/beans/PubkeywordrelationTbl.hbm.xml</value>
    <value>com/project/beans/PublicationTbl.hbm.xml</value>
    </list>
    </property>
    </bean>
    <!-- dao file start mapping here: -->
    <bean id="KeywordTblDAO" class="com.project.dao.KeywordTblDAO">
    <property name="sessionFactory">
    <ref bean="SessionFactory" />
    </property>
    </bean>
    <bean id="AuthorNewsTblDAO"
    class="com.project.dao.AuthorNewsTblDAO">
    <property name="sessionFactory">
    <ref bean="SessionFactory" />
    </property>
    </bean>
    <bean id=&quotubauthorrelationTblDAO"
    class="com.project.dao.PubauthorrelationTblDAO">
    <property name="sessionFactory">
    <ref bean="SessionFactory" />
    </property>
    </bean>
    <bean id="AuthorTblDAO" class="com.project.dao.AuthorTblDAO">
    <property name="sessionFactory">
    <ref bean="SessionFactory" />
    </property>
    </bean>
    <bean id="UserTblDAO" class="com.project.dao.UserTblDAO">
    <property name="sessionFactory">
    <1ref bean="SessionFactory" />
    </property>
    </bean>
    <bean id="PubkeywordrelationTblDAO"
    class="com.project.dao.PubkeywordrelationTblDAO">
    <property name="sessionFactory">
    <ref bean="SessionFactory" />
    </property>
    </bean>
    <bean id="PublicationTblDAO"
    class="com.project.dao.PublicationTblDAO">
    <property name="sessionFactory">
    <ref bean="SessionFactory" />
    </property>
    </bean>
    <!-- action mapping -->
    这部分还没有写的時候
    </beans>歡迎来到Java学习者论壇,转载请注明地址:http://www.javaxxz.com.
回复

使用道具 举报

该用户从未签到

 楼主| 发表于 2011-11-1 11:42:14 | 显示全部楼层

Re:/Struts2 hibernate3 spring2

==》 状況為: tomcat可以跑起来,LOG顯示dao 和bean的 mapping没有问题,
    可是在填写表单后插入数据的時候,报錯:
    @@@@@@@:ddd,ddd----我自己测试的数据,表示ACTION有从表单拿到值
    2009-10-03 09:40:53,453 ERROR [com.project.dao.UserTblDAO] - <save failed>
    java.lang.NullPointerException
    at com.project.dao.UserTblDAO.save(UserTblDAO.java:45)
    at com.project.web.actions.LoginAction.execute(LoginAction.java:74)---虽然是Login,但我写的是模拟數据添加进数据库,,,下面有代码
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:592)
    at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:404)
    at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:267)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:229)
    at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:221)
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)
    at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
    at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
    at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
    at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:150)
    at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:48)
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)
    at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
    。。。。。。。。。。
    显示dao的保存失败,,,--------这里 我就不知道为什么了。。。
    下面是我LOGIN action的代码:
    package com.project.web.actions;
    import java.util.List;
    import com.opensymphony.xwork2.ActionContext;
    import com.opensymphony.xwork2.ActionSupport;
    import com.project.beans.UserTbl;
    import com.project.dao.UserTblDAO;
    public class LoginAction extends ActionSupport {
    // 下面是Action内用于封裝用户请求参数的两个属性
    private String loginAccountName;
    private String loginPassword;
    private long sessionId = (long)(Math.random() * 1000000000);
    private UserTblDAO userTblDAO;
    public String getloginAccountName() {
    return loginAccountName;
    }
    public void setloginAccountName(String loginAccountName) {
    this.loginAccountName = loginAccountName;
    }
    public String getloginPassword() {
    return loginPassword;
    }
    public void setloginPassword(String loginPassword) {
    this.loginPassword = loginPassword;
    }
    UserTbl userInfomation = new UserTbl();
    this.userTblDAO = new UserTblDAO();
    System.out.println("@@@@@@@@:" + loginAccountName + "," + loginPassword);-----这里我测試从JSP表单过来的值是否取到,结果是可以拿到值,没问题,所以问题出在DAO没从ACTION的执行中拿到值
    下面是模擬一条记錄中的其他值:
    userInfomation.setAccountname(loginAccountName);
    userInfomation.setPassword(loginPassword);
    userInfomation.setFirstname("ccc");
    userInfomation.setLastname("vvv");
    userInfomation.setEmailaddress("ttt");
    userInfomation.setSecurityques("p");
    userInfomation.setSecurityquesans("y");
    userInfomation.setLocation("au");
    userInfomation.setLastlogintime(null);
    userInfomation.setUserid(6);
    try {
    userTblDAO.save(userInfomation);
    } catch (Exception ex) {
    ex.printStackTrace();
    return ERROR;
    }
    return SUCCESS;
    }
    }
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-11-1 11:42:29 | 显示全部楼层

Re:/Struts2 hibernate3 spring2

之后在网站上看了些资料,觉得应该是我在hibernate配置文件中没把ACTION的元素加入,所以在
    applicationContext.xml的 最后加入:
    。。。。。。。。。
    <bean id=&quotublicationTblDAO"  
    class="com.project.dao.PublicationTblDAO">  
    <property name="sessionFactory">  
    <ref bean="SessionFactory" />  
    </property>  
    </bean>  
    <!-- action mapping -->
    <bean id="LoginAction" class="com.project.web.actions.LoginAction">
    <property name="UserTblDAO">
    <ref bean="UserTblDAO" />
    </property>
    </bean>
    </beans>
    <property name="UserTblDAO"> 这里我试过使用我login action中實例化的对象“userTblDAO ”做为名字,,结果是報一样的错误如下::
    2009-10-03 09:54:13,296 ERROR [org.springframework.web.context.ContextLoader] - <Context initialization failed>
    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'LoginAction' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Error setting property values; nested exception is org.springframework.beans.NotWritablePropertyException: Invalid property 'UserTblDAO' of bean class [com.project.web.actions.LoginAction]: Bean property 'UserTblDAO' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter?
    Caused by:  
    org.springframework.beans.NotWritablePropertyException: Invalid property 'UserTblDAO' of bean class [com.project.web.actions.LoginAction]: Bean property 'UserTblDAO' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter?
    at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:793)
    at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:645)
    at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:78)
    at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:59)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1122)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:857)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:423)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:249)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:155)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:246)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:291)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:352)
    at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:245)
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:188)
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:49)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3795)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4252)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:736)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
    at org.apache.catalina.core.StandardService.start(StandardService.java:448)
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:700)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:552)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:592)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:295)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:433)
    这下弄的我真的很郁悶,,,,因為之前配环境就很搞了,,現在这个錯误究竟为什么,,怎么解決,,还请大家帮忙,,非常感谢,,
    另外,,个人覺得应该是hibernate配置文件没写好,,
    应该不是JAR包的問题,,
    谢谢!!!!!
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-11-1 11:42:36 | 显示全部楼层

Re:/Struts2 hibernate3 spring2

看JAVA的错誤提示真是太郁悶了。明一個錯,卻出现一大隊提示。
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-11-1 11:42:42 | 显示全部楼层

Re:/Struts2 hibernate3 spring2

<property name="UserTblDAO">
    <ref bean="UserTblDAO" />
    这个兩个名称错误
    上面一个是定义的要与SET的一致。
    下面一个是你的類名。不要错了。
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-11-1 11:42:49 | 显示全部楼层

Re:/Struts2 hibernate3 spring2

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'LoginAction' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Error setting property values; nested exception is org.springframework.beans.NotWritablePropertyException: Invalid property 'UserTblDAO' of bean class [com.project.web.actions.LoginAction]: Bean property 'UserTblDAO' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter?
    这不是已经告诉你什么地方错了
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-11-1 11:42:56 | 显示全部楼层

Re:/Struts2 hibernate3 spring2

你应该是dao 沒有set把。 注意名称要对应哦。。。
    <property name="UserTblDAO">
    UserTblDAO userTblDAO = null;
    public void setUserTblDAO(UserTblDAO userTblDAO ){
    this.userTblDAO = userTblDAO ;
    }
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2024-5-3 08:12 , Processed in 0.425102 second(s), 46 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表