2

I am new to SPRING MVC. I am not getting all the details of employee which contains phone and address object as well. Actually, those object are not being binded with employee.

Follow the code:

//(Controller)

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();
}
}

//Form which takes employee details 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 after submitting 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>

//my employee bean looks like this 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;
}
}

I can get only those details of employee like ssn, first name, last name etc but not phone type, phone no, address details which are the field of another objects. My assumption is the binding is not working here. Any idea?

3
  • Output I got as: SSN 213209567 First Name abc Last Name def Date of Birth 2-3-87 Email [email protected] Phone Type Phone Address Type Street City State Zip Country Commented Apr 19, 2014 at 20:35
  • can i see employee bean, it looks like mapping issue . Commented Apr 20, 2014 at 8:15
  • @PankajSharma: Now, You can see employee bean as well Commented Apr 20, 2014 at 10:28

2 Answers 2

2

I had a similar problem, solved by removing this line:

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

before the @ElementCollection that was not copied.

Sign up to request clarification or add additional context in comments.

Comments

0

You are missing "employee" as prefix & index in list elements when reading them.

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

1 Comment

That Did not work and I am still stuck in same place

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.