绑定SPRING MVC中的嵌套对象



我是SPRING MVC的新手。我没有得到员工的所有详细信息,包括电话和地址对象。实际上,这些对象并没有和employee绑定。

遵循代码:

//(控制器)

EmployeeController.java

@Controller
@RequestMapping(value = "/employee")
public class EmployeeController {
@Autowired  
EmployeeService employeeService;  
@RequestMapping("/employee")  
public ModelAndView registerEmployeer(@ModelAttribute Employee employee) {  
Map<String, Object> modelMap = new HashMap<>();
modelMap.put("employee", new Employee());
return new ModelAndView("employee", modelMap);
}
@RequestMapping("/add")    
public String addemployee(@ModelAttribute Employee employee) {
employeeService.save(employee);
return "result";
}
@ModelAttribute("phoneTypeList")
public Map<String,String> populatePhoneTypeList() 
{
return Phone.getPhoneTypes();
}
@ModelAttribute("addressTypeList")
public Map<String,String> populateAddressTypeList() 
{
return Address.getAddressTypes();
}
}

//记录员工详细信息的表格employee.jsp

<h2>Employee Information</h2>
<form:form method="POST" action="employee/add"
modelAttribute="employee">
<table>
<tr>
<td><form:label path="ssn">SSN</form:label></td>
<td><form:input path="ssn" /></td>
</tr>
<tr>
<td><form:label path="firstname">First Name</form:label>           </td>
<td><form:input path="firstname" /></td>
</tr>
<tr>
<td><form:label path="lastname">Last Name</form:label></td>
<td><form:input path="lastname" /></td>
</tr>
<tr>
<td><form:label path="dob">Date of Birth</form:label></td>
<td><form:input path="dob" /></td>
</tr>
<tr>
<td><form:label path="emailid">Email</form:label></td>
<td><form:input path="emailid" /></td>
</tr>
<tr>
<td>Phone Type:</td>
<td><form:select path="phoneList[0].phonetype" multiple="false">
<form:option value="NONE" label="--- Select ---" />
<form:options items="${phoneTypeList}" />
</form:select></td>
</tr>
<tr>
<td></td>
</tr>
<tr>
<td></td>
</tr>
<tr>
<td><form:label path="phoneList[0].phoneno">Phone</form:label></td>
<td><form:input path="phoneList[0].phoneno" /></td>
</tr>
<tr>
<td>Address Type:</td>
<td><form:select path="addressList[0].addresstype"
multiple="false">
<form:option value="NONE" label="--- Select ---" />
<form:options items="${addressTypeList}" />
</form:select></td>
<tr>
<td><form:label path="addressList[0].street">Street</form:label></td>
<td><form:input path="addressList[0].street" /></td>
</tr>
<tr>
<td><form:label path="addressList[0].city">City</form:label></td>
<td><form:input path="addressList[0].city" /></td>
</tr>
<tr>
<td><form:label path="addressList[0].state">State</form:label></td>
<td><form:input path="addressList[0].state" /></td>
</tr>
<tr>
<td><form:label path="addressList[0].zip">Zip</form:label></td>
<td><form:input path="addressList[0].zip" /></td>
</tr>
<tr>
<td><form:label path="addressList[0].country">Country</form:label></td>
<td><form:input path="addressList[0].country" /></td>
</tr>
<tr>
<td></td>
</tr>
<tr>
<td></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit"
value="Submit" /></td>
</tr>
</table>
</form:form>

//提交表格后的结果result.jsp

<h2>Submitted Employee Information</h2>
<table>
<tr>
<td>SSN</td>
<td>${employee.ssn}</td>
</tr>
<tr>
<td>First Name</td>
<td>${employee.firstname}</td>
</tr>
<tr>
<td>Last Name</td>
<td>${employee.lastname}</td>
</tr>
<tr>
<td>Date of Birth</td>
<td>${employee.dob}</td>
</tr>
<tr>
<td>Email</td>
<td>${employee.emailid}</td>
</tr>
<tr>
<td>Phone Type</td>
<td>${employee.phoneList[0].phonetype}</td>
</tr>
<tr>
<td>Phone</td>
<td>${phoneList[0].phoneno}</td>
</tr>
<tr>
<td>Address Type</td>
<td>${addressList.addressTypeList}</td>
</tr>
<tr>
<td>Street</td>
<td>${addressList.street}</td>
</tr>
<tr>
<td>City</td>
<td>${addressList.city}</td>
</tr>
<tr>
<td>State</td>
<td>${addressList.state}</td>
</tr>
<tr>
<td>Zip</td>
<td>${addressList.zip}</td>
</tr>
<tr>
<td>Country</td>
<td>${addressList.country}</td>
</tr>
</table>

//我的员工bean看起来像这样employee.java

public class Employee {
private List<Phone> phoneList = new ArrayList<Phone>();
private List<Address> addressList = new ArrayList<Address>();
private long ssn;
private String firstname;
private String lastname;
private String dob;
private String emailid;
public long getSsn() {
return ssn;
}
public void setSsn(long ssn) {
this.ssn = ssn;
}
public String getFirstname() {
return firstname;
}
public void setFirstname(String firstname) {
this.firstname = firstname;
}
public String getLastname() {
return lastname;
}
public void setLastname(String lastname) {
this.lastname = lastname;
}
public String getDob() {
return dob;
}
public void setDob(String dob) {
this.dob = dob;
}
public String getEmailid() {
return emailid;
}
public void setEmailid(String emailid) {
this.emailid = emailid;
}
public void addPhone(Phone ph) {
phoneList.add(ph);
}
public void addAddress(Address ad) {
addressList.add(ad);
}
public void setPhoneList(List<Phone> phoneList) {
this.phoneList = phoneList;
}
public List<Phone> getPhoneList() {
return phoneList;
}
public List<Address> getAddressList() {
return addressList;
}
public void setAddressList(List<Address> adList) {
this.addressList = adList;
}
}

我只能获得员工的详细信息,如ssn、名字、姓氏等,但不能获得电话类型、电话号码、地址详细信息,这些信息是另一个对象的字段。我的假设是绑定在这里不起作用。知道吗?

我也遇到过类似的问题,通过删除以下行来解决:

@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)

在未复制的CCD_ 1之前。

您缺少"employee"作为前缀&在读取列表元素时对其进行索引。

<tr>
<td>Phone</td>
<td>${employee.phoneList[0].phoneno}</td>
</tr>
<tr>
<td>Address Type</td>
<td>${employee.addressList[0].addressTypeList}</td>
</tr>
<tr>
<td>Street</td>
<td>${employee.addressList[0].street}</td>
</tr>
<tr>
<td>City</td>
<td>${employee.addressList[0].city}</td>
</tr>
<tr>
<td>State</td>
<td>${employee.addressList[0].state}</td>
</tr>
<tr>
<td>Zip</td>
<td>${employee.addressList[0].zip}</td>
</tr>
<tr>
<td>Country</td>
<td>${employee.addressList[0].country}</td>
</tr>

最新更新