当前位置:编程学习 > JAVA >>

struts 2 一个空指针错误,麻烦帮小弟看看哪里出错了

一个普通的User类public class User implements Serializable {
private String name;
private Long number;
private String 易做图;
private int age;
private String address;

public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Long getNumber() {
return number;
}
public void setNumber(Long number) {
this.number = number;
}
public String getSex() {
return 易做图;
}
public void setSex(String 易做图) {
this.易做图 = 易做图;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}


}


action类
public class UserAction extends BaseAction {

private User user;
private UserService userService =ObjectFactory.getUserService();
private List<User> users;

         public User getUser() {
return user;
}


public void setUser(User user) {
this.user = user;
}
        public String  loginUser(){
System.out.println(user.getName());
}

。。。。。  后面代码省略



为什么一运行到红色的代码就会吧这个空指针异常呢, 这个问题困扰我2天了。。。 --------------------编程问答-------------------- user的值没有注入进去所以是空的 --------------------编程问答--------------------    <s:textfield name="name" />   <br>

这是我的输入文本框   我的问题出在哪啊? --------------------编程问答-------------------- 提交表单?
struts2的易做图会拦截下来表单里的数据。
然后你才能get或者set
你看这个流程你哪个完成不了。 --------------------编程问答-------------------- debug试试吧

你的user肯定没有设值啊,user == null 自然空指针了。 --------------------编程问答-------------------- <s:textfield name="user.name" />   搞定 --------------------编程问答-------------------- <s:textfield name="name" /> <br>

改成:
<s:textfield name="user.username" /> <br>

--------------------编程问答-------------------- 正解
引用 6 楼 qinpeng100423 的回复:
<s:textfield name="name" /> <br>

改成:
<s:textfield name="user.username" /> <br>
--------------------编程问答-------------------- 搞定了   非常感谢各位  

就是又点不明白  <s:textfield name="name" /> <br>

改成:
<s:textfield name="user.username" />


为啥改成这样就好了?
--------------------编程问答-------------------- 你们确定是 user.username ?
不是 user.name ? --------------------编程问答-------------------- 复制错了  是 user.name 不是user.username --------------------编程问答-------------------- 还有人在么?  帮忙解释下其中的原理啊 --------------------编程问答-------------------- 是的,我写错了
是user.name
不好意思,我一直都用的是username --------------------编程问答-------------------- Struts2采用的是反射原理来完成BEAN之间的赋值,仔细学学吧,大佬 --------------------编程问答-------------------- <s:textfield name="user.name" /> <br>
提交表单后,struts2的参数易做图会找user对像的setName方法,将前台的参数赋值。
如果是这样:
<s:textfield name="name" /> <br>
那action中如果有个
private String name;
public void setName(String name) {
this.name = name;
}
那也可以得到值,它是action中的属性,而不是user的属性,
如果再加个getName()方法,那当action返回页面时,会给前台的标签
如<s:textfield name="name" /> ,<s:propoty value="name" /> <br>
赋值.
建议你看下struts2的默认易做图,有个是param的易做图做这个的 --------------------编程问答-------------------- 因为你在 UserAction 定义的是类user,所以在前台你也要传进的是user,也就是说要传进一个对象
比如说你如果在你的action 定义了一个 Public String name
那么通过 <s:textfield name="name" /> <br> 你就可以获得name的值了 --------------------编程问答-------------------- 5楼正解 --------------------编程问答-------------------- 页面中用<s:textfield name="name" />, 在UserAction就要有对应的name的get set方法
只要在页面中输入值,后台打印System.out.println("name=="+name);肯定有值,而楼上,的User user=new User();
这一一步只做了声明并实例化,而没有复制,所以出错! --------------------编程问答--------------------
引用 6 楼 qinpeng100423 的回复:
<s:textfield name="name" /> <br>

改成:
<s:textfield name="user.username" /> <br>


+1 --------------------编程问答-------------------- action定义的是一个User对象,所以你页面肯定得user.name才能设值进去,
你可以再随意在action定义一个string的name属性,然后get/set....再在页面上直接
<s:textfield name="name" /> 这样肯定是有值的.

区别就在于一个是对象里属性,
另一个直接是属性
补充:Java ,  Web 开发
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,