1

我有两个课程如下

Address
  int ID
  int unit
  String street 

User 
    int ID 
    String Name
    Address address

我的用户类

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

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

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

“严重:处理请求期间发生异常: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>
4

5 回答 5

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"/>

仅用于设置单位属性

于 2013-02-13T06:38:46.423 回答
2

做以下伴侣

<s:textfield name="address.unit" label="Unit"/>
于 2013-02-13T04:35:59.373 回答
1
 <s:textfield name="name" label="Name"/>

这里 struts2 将 在您各自的操作中搜索相关 DTO 中的name="name"属性,但 value-stack 将无法在您的操作中找到名为“name”的属性,因为您创建了一个不同的 bean 类 Address 它具有成员名字”。因此,您必须告诉您的表单元素“名称”实例驻留在不同的 POJO 中,即Adderess。所以做这样的改变:

<s:textfield name="address.name" label="name"/>
于 2013-02-13T05:17:16.407 回答
0

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

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

于 2013-02-13T04:32:36.630 回答
0

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

于 2013-02-13T04:34:47.710 回答