一个普通的User类public class User implements Serializable {
private String name;
private Long number;
private String sex;
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 sex;
}
public void setSex(String sex) {
this.sex = sex;
}
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天了

解决方案 »

  1.   

    user的值没有注入进去所以是空的
      

  2.   

       <s:textfield name="name" />   <br>这是我的输入文本框   我的问题出在哪啊?
      

  3.   

    提交表单?
    struts2的拦截器会拦截下来表单里的数据。
    然后你才能get或者set
    你看这个流程你哪个完成不了。
      

  4.   

    debug试试吧你的user肯定没有设值啊,user == null 自然空指针了。
      

  5.   

    <s:textfield name="user.name" />   搞定
      

  6.   

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

  7.   

    搞定了   非常感谢各位  就是又点不明白  <s:textfield name="name" /> <br>改成:
    <s:textfield name="user.username" />
    为啥改成这样就好了?
      

  8.   

    你们确定是 user.username ?
    不是 user.name ?
      

  9.   

    复制错了  是 user.name 不是user.username
      

  10.   

    是的,我写错了
    是user.name
    不好意思,我一直都用的是username
      

  11.   

    Struts2采用的是反射原理来完成BEAN之间的赋值,仔细学学吧,大佬
      

  12.   

    <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的拦截器做这个的
      

  13.   

    因为你在 UserAction 定义的是类user,所以在前台你也要传进的是user,也就是说要传进一个对象
    比如说你如果在你的action 定义了一个 Public String name
    那么通过 <s:textfield name="name" /> <br> 你就可以获得name的值了
      

  14.   

    页面中用<s:textfield name="name" />, 在UserAction就要有对应的name的get set方法
    只要在页面中输入值,后台打印System.out.println("name=="+name);肯定有值,而楼上,的User user=new User();
    这一一步只做了声明并实例化,而没有复制,所以出错!
      

  15.   

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