使用ModelDriven时出现NullPointerException错误

时间:2013-02-13 04:01:53

标签: java jsp struts2 model-driven

我有以下两个课程

Address
  int ID
  int unit
  String street 

User 
    int ID 
    String Name
    Address address

我的用户类

public class user{
    .....
    private Address address;
     ...getters setters...
}

如上所示,User类中有一个Address类对象。我的代码应该接收表单的值并在控制台上显示它们。

但是当我尝试访问地址类的unit属性时,它会显示以下错误。

“SEVERE:处理请求期间发生异常:null 显示java.lang.NullPointerException“

我的控制器

@Action
class myclass implements ModelDriven{

   private User user = new User();

   public Register(){
       System.out.println("User's Unit" + user.getAddress().getUnit()); // error is on this line
   }
     @Override
    public Object getModel() {
       return user;
    }

jsp文件

<s:form action="Register">
             <s:textfield name="name" label="Name"/>
             <s:textfield name="unit" label="Unit"/>
             <s:textfield name="block" label="Block"/>
</s:form>

5 个答案:

答案 0 :(得分:2)

做以下配偶

<s:textfield name="address.unit" label="Unit"/>

答案 1 :(得分:2)

尝试这个动作类肯定会有效

public class myclass extends ActionSupport implements ModelDriven<User>, Preparable{

    private User user = new User();

@Override
public void prepare() throws Exception {
    user=new User();
}

@Override
public User getModel() {
    return user;
}
public Register(){
   System.out.println("User's Unit" + user.getAddress().getUnit()); 
   }
}

并更改jsp

<s:textfield name="address.unit" label="Unit"/>

仅用于设置单位属性

答案 2 :(得分:1)

 <s:textfield name="name" label="Name"/>

此处struts2将在您各自的操作中搜索相关DTO中的 name =“name”属性,但是值堆栈将无法找到名为“name”的属性在您的操作中,因为您创建了一个具有成员“name”的不同bean类Address。   因此,您必须告诉您的表单元素“name”实例位于不同的POJO中 即 Adderess 。所以做这样的改变:

<s:textfield name="address.name" label="name"/>

答案 3 :(得分:0)

我看到的问题是,你没有new d address对象

address = new Address();类的构造函数中的

User

答案 4 :(得分:0)

看起来当您使用“private User user = new User()”创建用户对象时,未初始化用户的地址对象。 由于user.getAddress()为null,当您尝试调用user.getAddress()。getUnit()时,将导致空指针异常