Java 在SpringMVC中绑定嵌套对象

Java 在SpringMVC中绑定嵌套对象,java,spring,jsp,spring-mvc,Java,Spring,Jsp,Spring Mvc,我是SPRING MVC的新手。我没有得到包含电话和地址对象的员工的所有详细信息。实际上,这些对象并没有绑定到employee 请遵循以下代码: //(控制员) EmployeeController.java @Controller @RequestMapping(value = "/employee") public class EmployeeController { @Autowired EmployeeService employeeService; @RequestMappin

我是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();
}
}
@控制器
@请求映射(value=“/employee”)
公共类EmployeeController{
@自动连线
员工服务员工服务;
@请求映射(“/employee”)
公共模型和视图注册雇员(@modeldattribute Employee){
Map modelMap=新的HashMap();
modelMap.put(“employee”,newemployee());
返回新的ModelAndView(“员工”,modelMap);
}
@请求映射(“/add”)
公共字符串addemployee(@modeldattribute Employee){
employeeService.save(雇员);
返回“结果”;
}
@ModelAttribute(“电话类型列表”)
公共地图populatePhoneTypeList()
{
return Phone.getPhoneTypes();
}
@ModelAttribute(“addressTypeList”)
公共映射populateAddressTypeList()
{
返回地址。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>
员工信息
SSN
名字
姓
出生日期
电子邮件
电话类型:
电话
地址类型:
街头
城市
陈述
拉链
国家
//提交表格后的结果 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>
提交的员工信息
SSN
${employee.ssn}
名字
${employee.firstname}
姓
${employee.lastname}
出生日期
${employee.dob}
电子邮件
${employee.emailid}
电话类型
${employee.phoneList[0].phonetype}
电话
${phoneList[0].phoneno}
地址类型
${addressList.addressTypeList}
街头
${addressList.street}
城市
${addressList.city}
陈述
${addressList.state}
拉链
${addressList.zip}
国家
${addressList.country}
//我的雇员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;
}
}
公共类员工{
private List phoneList=new ArrayList();
private List addressList=new ArrayList();
私人长ssn;
私有字符串名;
私有字符串lastname;
私有字符串dob;
私有字符串emailid;
公共长getSsn(){
返回ssn;
}
公共无效设置序列号(长序列号){
这个.ssn=ssn;
}
公共字符串getFirstname(){
返回名字;
}
public void setFirstname(字符串firstname){
this.firstname=firstname;
}
公共字符串getLastname(){
返回姓氏;
}
public void setLastname(字符串lastname){
this.lastname=lastname;
}
公共字符串getDob(){
返回dob;
}
公共void setDob(字符串dob){
this.dob=dob;
}
公共字符串getEmailid(){
返回emailid;
}
public void setEmailid(字符串emailid){
this.emailid=emailid;
}
公用电话(电话ph){
电话列表。添加(ph);
}
公共无效地址(地址ad){
地址列表。添加(ad);
}
公用void设置电话列表(列表电话列表){
this.phoneList=电话列表;
}
公共列表getPhoneList(){
返回电话列表;
}
公共列表getAddressList(){
返回地址列表;
}
公共无效设置地址列表(列表adList){
this.addressList=adList;
}
}
我只能获取员工的详细信息,如ssn、名字、姓氏等,但不能获取电话类型、电话号码、地址详细信息,这些信息是另一个对象的字段。我的假设是绑定在这里不起作用。有什么想法吗?

在读取列表元素时,列表元素中缺少前缀和索引“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>

电话
${employee.phoneList[0].phoneno}
地址类型
${employee.addressList[0].addressTypeList}
街头
${employee.addressList[0].street}
城市
${employee.addressList[0].city}
陈述
${employee.addressList[0].state}
拉链
${employee.addressList[0].zip}
国家
${employee.addressList[0]。国家}

我有一个类似的问题,通过删除这一行来解决:

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

在未复制的
@ElementCollection
之前。

我得到的输出为:SSN 213209567名abc姓def出生日期2-3-87电子邮件abc@cde.com电话类型电话地址类型街道城市州邮编国家我能看到员工bean吗,看起来像是映射问题。@PankajSharma:现在,你们可以看到employee bean也不起作用了,我仍然被困在同一个地方