一个关于action调用dao的问题 root cause为空指针,估计你参数传得不对。导致对空对象的使用。你看看com.dyh.common.Userdel.userdel(Userdel.java:32) 这一行的代码,凡是有“.”前面的对象都检查一下是否为空。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Userdel第32行看看有对象为空了 com.dyh.struts.action.UserdelAction.execute(UserdelAction.java:46) !!!!46行是这行吧!userdel.userdel(); 仔细看看这个方法有什么错,没代码反正我们是看不出来 樓主與我的問題一樣我的問題見:http://topic.csdn.net/u/20080314/11/84f8d04b-d441-4eb3-975a-bcf8d2d8b2b7.html Userdel userdel=new Userdel(); userdel.userdel(); 能告诉我 你这两句是干什么用的吗?看不明白啊! 不好意思 因为在Action中不可以调用 所以我尝试了下把代码放到一个专门的类里面Userdel就是专门的类 如下主要是最后一个userdel()方法package com.dyh.common;import com.dyh.hibernate.dao.MessagesDAO;import com.dyh.hibernate.dao.ReplyDAO;import com.dyh.hibernate.dao.UsersDAO;public class Userdel { private UsersDAO usersDao; private MessagesDAO messagesDao; private ReplyDAO replyDao; public UsersDAO getUsersDao() { return usersDao; } public void setUsersDao(UsersDAO usersDao) { this.usersDao = usersDao; } public MessagesDAO getMessagesDao() { return messagesDao; } public void setMessagesDao(MessagesDAO messagesDao) { this.messagesDao = messagesDao; } public ReplyDAO getReplyDao() { return replyDao; } public void setReplyDao(ReplyDAO replyDao) { this.replyDao = replyDao; } public void userdel(){ usersDao.findAll(); }} FILTER是我做的一个过滤器过滤字符的 难道是他的原因? Userdel.java的32行,lz指出你的Userdel.java的32行什么代码。如果我没有说错的话,应该是userdel中调用findall()方法时出错吧。 Userdel 类中在spring中有给usersDao注入吗? 回答11楼 <bean name="Userdel" class="com.dyh.common.Userdel" > <property name="usersDao"> <ref bean="UsersDAO"/> </property> <property name="messagesDao"> <ref bean="MessagesDAO"/> </property> <property name="replyDao"> <ref bean="ReplyDAO" /> </property> </bean> 我是有好几个Action都调用到了一个dao但是只有一个是可以调用的而别的呢 也是可以调用走dao的方法 但是当运行它里面方法的时候就报错了 而且与正常运行的Action调用的是同一个方法 你没有对那个dao进行依赖注入吧。 Userdel userdel=new Userdel(); userdel.userdel(); 你这样new 肯定出错。action中该成这样你试下/* * Generated by MyEclipse Struts * Template path: templates/java/JavaClass.vtl */ package com.dyh.struts.action; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import com.dyh.common.Userdel; import com.dyh.hibernate.dao.MessagesDAO; import com.dyh.hibernate.dao.ReplyDAO; import com.dyh.hibernate.dao.UsersDAO; /** * MyEclipse Struts * Creation date: 03-14-2008 * * XDoclet definition: * @struts.action validate="true" */ public class UserdelAction extends Action { /* * Generated Methods */ /** * Method execute * @param mapping * @param form * @param request * @param response * @return ActionForward */ private Userdel userdel; private MessagesDAO messagesDao; private ReplyDAO replyDao; public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { userdel.userdel(); return null; } public UsersDAO getUserdel() { return userdel; } public void setUserdel(Userdel userdel) { this.userdel= userdel; } public MessagesDAO getMessagesDao() { return messagesDao; } public void setMessagesDao(MessagesDAO messagesDao) { this.messagesDao = messagesDao; } public ReplyDAO getReplyDao() { return replyDao; } public void setReplyDao(ReplyDAO replyDao) { this.replyDao = replyDao; } } spring中相应的改成<bean name="/userdel" class="com.dyh.struts.action.UserdelAction" > <property name="userdel"> <ref bean="Userdel"/> </property> <property name="messagesDao"> <ref bean="MessagesDAO"/> </property> <property name="replyDao"> <ref bean="ReplyDAO" /> </property> </bean> 你的spring的依赖注入的概念还不是很清楚啊,得补下啊 有点小误,把public UsersDAO getUserdel() { return userdel; } 改成public Userdel getUserdel() { return userdel; } 回复楼上上的我原来确实如你写的那样在Action中注入的 可是不能调用然后我把写到一个操作类Userdel里面 将操作类注入在操作类里面调用这样也不可以配置文件我写的就是是操作类的 不是Action你看这样可以吗?这个问题我换了下所有的jar包已经解决了 有点不明白,希望楼主说得更清楚些,换了些什么JAR包,谢谢!!! 把工程的包全换了lib文件夹下的全换了 javaEE的具体怎样了解? myeclipse7.0+hibernate3.3问题 THINKPAD C盘100多G,如何分区 Iterator修改页面显示的数据问题,我相信大家都遇到过`~~请路过的帮助一下 JAVA-WEB 权限问题,请教大哥们 J2EE主要学什么? 100分相赠JAVA高手,关于数据库操作的StringBuffer 挥泪大甩卖《EJB编程指南》一书 Axis产生的输出有奇怪问题 哪位老兄做过数据缓存的,进来聊聊 dom4j xml节点读取问题 请问一下tomcat如何给一个网站多个访问的方式,谢谢
46行是这行吧!
userdel.userdel();
仔细看看这个方法有什么错,没代码反正我们是看不出来
我的問題見:http://topic.csdn.net/u/20080314/11/84f8d04b-d441-4eb3-975a-bcf8d2d8b2b7.html
userdel.userdel(); 能告诉我 你这两句是干什么用的吗?
看不明白啊!
Userdel就是专门的类 如下
主要是最后一个userdel()方法package com.dyh.common;import com.dyh.hibernate.dao.MessagesDAO;
import com.dyh.hibernate.dao.ReplyDAO;
import com.dyh.hibernate.dao.UsersDAO;
public class Userdel {
private UsersDAO usersDao;
private MessagesDAO messagesDao;
private ReplyDAO replyDao;
public UsersDAO getUsersDao() {
return usersDao;
}
public void setUsersDao(UsersDAO usersDao) {
this.usersDao = usersDao;
}
public MessagesDAO getMessagesDao() {
return messagesDao;
}
public void setMessagesDao(MessagesDAO messagesDao) {
this.messagesDao = messagesDao;
}
public ReplyDAO getReplyDao() {
return replyDao;
}
public void setReplyDao(ReplyDAO replyDao) {
this.replyDao = replyDao;
}
public void userdel(){
usersDao.findAll();
}
}
难道是他的原因?
<property name="usersDao">
<ref bean="UsersDAO"/>
</property>
<property name="messagesDao">
<ref bean="MessagesDAO"/>
</property>
<property name="replyDao">
<ref bean="ReplyDAO" />
</property>
</bean>
但是只有一个是可以调用的而别的呢 也是可以调用走dao的方法 但是当运行它里面方法的时候就报错了 而且与正常运行的Action调用的是同一个方法
userdel.userdel();
你这样new 肯定出错。action中该成这样你试下
/*
* Generated by MyEclipse Struts
* Template path: templates/java/JavaClass.vtl
*/
package com.dyh.struts.action; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping; import com.dyh.common.Userdel;
import com.dyh.hibernate.dao.MessagesDAO;
import com.dyh.hibernate.dao.ReplyDAO;
import com.dyh.hibernate.dao.UsersDAO; /**
* MyEclipse Struts
* Creation date: 03-14-2008
*
* XDoclet definition:
* @struts.action validate="true"
*/
public class UserdelAction extends Action {
/*
* Generated Methods
*/ /**
* Method execute
* @param mapping
* @param form
* @param request
* @param response
* @return ActionForward
*/
private Userdel userdel;
private MessagesDAO messagesDao;
private ReplyDAO replyDao;
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
userdel.userdel(); return null;
}
public UsersDAO getUserdel() {
return userdel;
}
public void setUserdel(Userdel userdel) {
this.userdel= userdel;
}
public MessagesDAO getMessagesDao() {
return messagesDao;
}
public void setMessagesDao(MessagesDAO messagesDao) {
this.messagesDao = messagesDao;
}
public ReplyDAO getReplyDao() {
return replyDao;
}
public void setReplyDao(ReplyDAO replyDao) {
this.replyDao = replyDao;
}
}
spring中相应的改成<bean name="/userdel" class="com.dyh.struts.action.UserdelAction" >
<property name="userdel">
<ref bean="Userdel"/>
</property>
<property name="messagesDao">
<ref bean="MessagesDAO"/>
</property>
<property name="replyDao">
<ref bean="ReplyDAO" />
</property>
</bean>
return userdel;
} 改成public Userdel getUserdel() {
return userdel;
}
我原来确实如你写的那样在Action中注入的 可是不能调用
然后我把写到一个操作类Userdel里面 将操作类注入在操作类里面调用这样也不可以配置文件我写的就是是操作类的 不是Action
你看这样可以吗?
这个问题我换了下所有的jar包
已经解决了