我有以下两个课程
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>
答案 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()时,将导致空指针异常