spring jdbcdaosupport 的使用问题

legend_jhz 2009-03-13 01:28:32
在spring学习中,利用jdbcdaosupport来对jdbc进行操控,UserService代码如下:

public interface UserService {
public int login(String username, String password);

UserServiceImpl代码如下:

public class UserServiceImpl implements UserService {
private UserDao userDao;
private GroupDao groupDao;
public UserDao getUserDao() {
return userDao;
}

public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}

public GroupDao getGroupDao() {
return groupDao;
}

public void setGroupDao(GroupDao groupDao) {
this.groupDao = groupDao;
}

public int login(String username, String password) {
String dbpswd = userDao.getPasswordByUsername(username);
// }

UserDao代码如下:

public interface UserDao {
public String getPasswordByUsername(String username);

UserDaoImpl代码如下:

public class UserDaoImpl extends JdbcDaoSupport implements UserDao {
public String getPasswordByUsername(String username) {
//

我的applicationContext.xml配置如下:

<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<bean id="baseTransaction"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
abstract="true">
<property name="transactionManager" ref="transactionManager" />
<property name="proxyTargetClass" value="true" />
<property name="transactionAttributes">
<props>
<prop key="login">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
<bean id="userService" parent="baseTransaction" abstract="false"
lazy-init="default" autowire="default" dependency-check="default">
<property name="target">
<bean
class="cn.qdrk.tax.service.impl.UserServiceImpl">
<property name="userDao">
<ref bean="userDao" />
</property>
<property name="groupDao">
<ref bean="groupDao"/>
</property>
</bean>
</property>
</bean>
<bean id="userDao" class="cn.qdrk.tax.jdbc.UserDaoImpl">
<property name="dataSource" ref="dataSource"/>
</bean>
<bean id="groupDao" class="cn.qdrk.tax.jdbc.GroupDaoImpl">
<property name="dataSource" ref="dataSource"/>
</bean>


<bean name="/taxuser"
class="cn.qdrk.tax.action.TaxUserAction" abstract="false"
lazy-init="default" autowire="default" dependency-check="default">
<property name="userService">
<ref bean="userService" />
</property>
</bean>

但是在action中调用:

public class TaxUserAction extends Action {
private UserService userService;
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
TaxUserForm tuf = (TaxUserForm) form;
String username = tuf.getLoginName();
String password = tuf.getPassword();
UserInfo ui = new UserInfo();
ui.setUsername(username);
ui.setPassword(password);
request.getSession().setAttribute("userinfo", ui);
int ls = 0;
try {
ls = userService.login(username, password);

userService.login(username, password);会出现空指针异常,我的配置文件是不是有错误?
...全文
754 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
FAT0708 2009-03-13
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 legend_jhz 的回复:]
这里也没加什么东西啊,为什么不行呢?
[/Quote]
楼主不是在ssh1中已经实现了吗?现在怎么又不行了。
legend_jhz 2009-03-13
  • 打赏
  • 举报
回复
这里也没加什么东西啊,为什么不行呢?
FAT0708 2009-03-13
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 legend_jhz 的回复:]
引用 11 楼 FAT0708 的回复:
引用 9 楼 legend_jhz 的回复:
引用 8 楼 FAT0708 的回复:
Action也能注入?我还真的想知道。

这没什么好稀奇的。

问题就是用Action注入,就是null。我想知道怎么注入不是null。

在ssh1中,我就是这么做的,可以。
[/Quote]
最基础的servlet我测试好像不行,大家有办法吗?
legend_jhz 2009-03-13
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 FAT0708 的回复:]
引用 9 楼 legend_jhz 的回复:
引用 8 楼 FAT0708 的回复:
Action也能注入?我还真的想知道。

这没什么好稀奇的。

问题就是用Action注入,就是null。我想知道怎么注入不是null。
[/Quote]
在ssh1中,我就是这么做的,可以。
FAT0708 2009-03-13
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 legend_jhz 的回复:]
引用 8 楼 FAT0708 的回复:
Action也能注入?我还真的想知道。

这没什么好稀奇的。
[/Quote]
问题就是用Action注入,就是null。我想知道怎么注入不是null。
哒哒 2009-03-13
  • 打赏
  • 举报
回复
首先,肯定jar包没有问题,jar包有问题一般不会报空指针异常..
TaxUserForm tuf = (TaxUserForm) form;
String username = tuf.getLoginName();
String password = tuf.getPassword();
UserInfo ui = new UserInfo();
ui.setUsername(username);
ui.setPassword(password);
request.getSession().setAttribute("userinfo", ui);
int ls = 0;
try {
ls = userService.login(username, password);

你看看 userService.login(username, password); 中的username,password 在上面就 放到UserInfo中去了
把 userService.login(username, password); 该为 userService.login(ui);试试看...

这可能是对象持久话的问题...
legend_jhz 2009-03-13
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 FAT0708 的回复:]
Action也能注入?我还真的想知道。
[/Quote]
这没什么好稀奇的。
FAT0708 2009-03-13
  • 打赏
  • 举报
回复
Action也能注入?我还真的想知道。
legend_jhz 2009-03-13
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 Landor2004 的回复:]
发现点问题,我记得proxyTargetClass=true的时候目标类是被cglib代理,而不是你的interface的形式

所以请楼主去掉 <property name="proxyTargetClass" value="true" />
这句话
[/Quote]
首先谢谢,可是我去掉这句话后,还是报这个异常。
Landor2004 2009-03-13
  • 打赏
  • 举报
回复
发现点问题,我记得proxyTargetClass=true的时候目标类是被cglib代理,而不是你的interface的形式

所以请楼主去掉<property name="proxyTargetClass" value="true" />
这句话
legend_jhz 2009-03-13
  • 打赏
  • 举报
回复
sdsdsds
legend_jhz 2009-03-13
  • 打赏
  • 举报
回复
up
Landor2004 2009-03-13
  • 打赏
  • 举报
回复
你的把异常贴出来,完整的异常
legend_jhz 2009-03-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 HinanaiTenshi 的回复:]
TaxUserAction里有userService的set方法吗?
有set方法而注入没成功的话, 把完整的异常发上来吧( ̄(工) ̄)
[/Quote]
有set方法。

java.lang.NullPointerException
at cn.qdrk.tax.action.TaxUserAction.execute(TaxUserAction.java:25)
at org.apache.struts.chain.commands.servlet.ExecuteAction.execute(ExecuteAction.java:58)
at org.apache.struts.chain.commands.AbstractExecuteAction.execute(AbstractExecuteAction.java:67)
at org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)
at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
at org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:304)
at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
at org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)
HinanaiTenshi 2009-03-13
  • 打赏
  • 举报
回复
TaxUserAction里有userService的set方法吗?
有set方法而注入没成功的话, 把完整的异常发上来吧( ̄(工) ̄)

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧