首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

这是神马景况?求SSh大神···(空指针)

2012-06-23 
这是神马情况?求SSh大神(空指针)formclassform-horizontal methodget actionupdataStudents:s

这是神马情况?求SSh大神···(空指针)
<form class="form-horizontal" method="get" action="updataStudent">
<s:set name="id" value="parameters.id[0]"></s:set>
<!-- <s:set name="person" value="id"/> -->
<fieldset>
<legend>个人信息</legend>
<div class="control-group"> 
<label class="control-label" for="account">用户名:</label>
<div class="controls">
<s:textfield readonly="true" name="person.account"></s:textfield>
</div>
</div>
<div class="control-group">
<label class="control-label" for="name">真实姓名:</label>
<div class="controls">
<s:textfield readonly="true" name="person.name"></s:textfield>
</div>
</div> 

<div class="control-group">
<label class="control-label" for="email">电子邮箱:</label><div class="controls">
<input type="text" class="span2" id="email" name="person.email" value="<s:property value="person.email"/>">
</div>
</div>
<div class="control-group">
<label class="control-label" for="tel">联系电话:</label>
<div class="controls">
<input type="text" class="span2" id="tel" name="person.telephone" value="<s:property value="person.telephone"/>">
</div>
</div>
<div class="form-actions">
<button type="submit" class="btn btn-primary">修改信息</button>
<a href="#" class="btn">返回</a> 
</div>
</fieldset>
</form>
点保存的时候:地址栏如下
http://localhost:8080/scnupm/student/updataStudent?person.password=&person.id=&person.type=&person.account=fuhuasishui&person.name=%E5%BC%A0%E6%98%8E%E5%8D%8E&person.email=15521267125%40163.com&person.telephone=13560134432
×××××××××××××××××××××××××××××××××××××××××××××××××××××××
  Structs配置如下:
<action name="showStudent"
class="cn.edu.scnu.cs.scnupm.action.person.ShowStudentAction">
<result name="success">/student/personalmanage.jsp</result>
</action>
<action name="updataStudent"
class="cn.edu.scnu.cs.scnupm.action.person.UpdataStudentAction">
<interceptor-ref name="studentStack" />
<result name="success">/student/personalmanage.jsp</result>
</action>
×××××××××××××××××××××××××××××××××××××××××××××××××××××××Action的函数如下:
public String execute() throws Exception {
  try{
  System.out.println(person.getId()+":test0");
studentService.updataStudent(person);
  }catch(Exception e){
  e.printStackTrace();
  }
return SUCCESS;
}
控制台输出的为:
null:test0

java.lang.NullPointerException


at cn.edu.scnu.cs.scnupm.service.impl.StudentServiceImpl.updataStudent(StudentServiceImpl.java:61)
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:597)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:309)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
at $Proxy9.updataStudent(Unknown Source)
at cn.edu.scnu.cs.scnupm.action.person.UpdataStudentAction.execute(UpdataStudentAction.java:19)
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:597)
at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:452)
at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:291)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:254)
·····
server层的代码为
public boolean updataStudent(Person user) {
if (persondao.findById(user.getId()) != null) {
// 如果存在则调用dao组件删除s
persondao.update(user);
System.out.println(user.getId()+":test"); (!控制台没有输出这个)
} else {
System.out.println("false:test");
return false;
}
return true;
}

[解决办法]
java.lang.NullPointerException
 at cn.edu.scnu.cs.scnupm.service.impl.StudentServiceImpl.updataStudent(StudentServiceImpl.java:61)
这里报了一个空指针,你可以调试一下
System.out.println(user.getId()+":test"); (!控制台没有输出这个)
应该是这里报的吧,可能是user为空,然后user.getId()就报了空指针异常

[解决办法]
updataStudent方法中
persondao.update(user);一句,user为空吧?前台没传过来。
不知道你是不是没注入user
[解决办法]
应该是你的persion对象注入失败,为空吧,没看到你action里,有没有定义persion对象?有没有setPersion(persion)属性方法?这是注入persion对象所必须的

[解决办法]
控制台输出的为:
null:test0
说明persion不为空啊,只是getId为null而已。
看看service和Dao都注入了没,有没有set方法,其实空指针问题,断点一下就知道哪里为空了!

热点排行