I have built a dao layer which connects with a derby db with the use of jdbctemplate.
The insert query works fine but when I try to select all rows from the database, the webapp gives me this error:
org.apache.jasper.JasperException: An exception occurred processing JSP page /WEB-INF/jsp/DisplayEmployee.jsp at line 26
23: 24: 25: 26: ${temp.FirstName} 27: ${temp.MiddleName} 28: ${temp.LastName} 29: ${temp.email}
avax.el.PropertyNotFoundException: Property 'FirstName' not found on type com.user.EmployeeInfo
Code:
DAO:
public class EmployeeDao {
JdbcTemplate template;
public void setTemplate(JdbcTemplate template) {
this.template = template;
}
public int insert(EmployeeInfo emp){
String sql = "insert into employee VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)";
int i=template.update(sql, emp.getFirstName(), emp.getMiddleName(), emp.getLastName(), emp.getEmail(), emp.getGender(), emp.getDob(), emp.getAddress1(), emp.getAddress2(), emp.getEmpID());
return i;
}
public List<EmployeeInfo> retrieveMultipleRowsColumns(){
String sql = "select * from employee";
//return template.queryForList(sql, elementType)
//List<EmployeeInfo> list = template.query(sql,new BeanPropertyRowMapper<EmployeeInfo>(EmployeeInfo.class));
//List<EmployeeInfo> list2 = template.queryForList(sql, EmployeeInfo.class);
List<EmployeeInfo> list3 = template.query(sql, new RowMapper<EmployeeInfo>(){
public EmployeeInfo mapRow(ResultSet rs, int rownumber) throws SQLException {
EmployeeInfo e = new EmployeeInfo();
e.setFirstName(rs.getString(1));
e.setMiddleName(rs.getString(2));
e.setLastName(rs.getString(3));
e.setEmail(rs.getString(4));
e.setGender(rs.getString(5));
e.setDob(rs.getDate(6));
e.setAddress1(rs.getString(7));
e.setAddress2(rs.getString(8));
e.setEmpID(rs.getInt(9));
return e;
}
});
return list3;
}
Controller:
public class EmployeeAddition {
@Autowired
EmployeeDao dao;
@RequestMapping("/addresult")
public ModelAndView addResult(HttpServletRequest req,HttpServletResponse res) {
String fname = req.getParameter("FirstName");
String mname = req.getParameter("MiddleName");
String middlename;
if(mname!="null"&&mname.trim()!=""){
middlename=mname;
}
else
{
middlename="-";
}
String lname = req.getParameter("LastName");
String empid = req.getParameter("empID");
int empID = Integer.parseInt(empid);
String email = req.getParameter("Email");
String gender = req.getParameter("gender");
Date dob = Date.valueOf(req.getParameter("DOB"));
String addr1 = req.getParameter("address1");
String addr2 = req.getParameter("address2");
EmployeeInfo emp = new EmployeeInfo(fname,middlename,lname,email,gender,dob,addr1,addr2,empID);
int ret = dao.insert(emp);
if(ret==0){
return new ModelAndView("EmployeeAddResult","mess","Success");
}
else
{
return new ModelAndView("EmployeeAddResult","mess","hi");
}
}
@RequestMapping("/display")
public ModelAndView viewEmployee(HttpServletRequest req,HttpServletResponse res,ModelMap model) {
List<EmployeeInfo> list=dao.retrieveMultipleRowsColumns();
model.put("list",list);
return new ModelAndView("DisplayEmployee","mess","Welcome "+(String)req.getSession().getAttribute("uname"));
}
}
The jsp where i'm displaying the result:
<div class="right_disp left">
<c:forEach items="${list}" var="temp">
<tr>
<td>${temp.FirstName}</td>
<td>${temp.MiddleName}</td>
<td>${temp.LastName}</td>
<td>${temp.email}</td>
<td>${temp.gender}</td>
<td>${temp.dob}</td>
<td>${temp.Address1}</td>
<td>${temp.Address2}</td>
<td>${temp.empID}</td>
</tr>
</c:forEach>
</div>
The variable name match the original variables of the POJO class but I don't understand why the error for Property not found on the class is coming.
Appreciate any suggestion or help.
Edit:
EmployeeInfo class(POJO)
import java.sql.Date;
public class EmployeeInfo {
String FirstName;
String MiddleName;
String LastName;
String email;
String gender;
Date dob;
String Address1;
String Address2;
int empID;
public EmployeeInfo(){
}
public EmployeeInfo(String firstName, String middleName, String lastName, String email, String gender,
Date dob, String address1, String address2, int empID) {
super();
FirstName = firstName;
MiddleName = middleName;
LastName = lastName;
this.email = email;
this.gender = gender;
this.dob = dob;
Address1 = address1;
Address2 = address2;
this.empID = empID;
}
public String getFirstName() {
return FirstName;
}
public void setFirstName(String firstName) {
FirstName = firstName;
}
public String getMiddleName() {
return MiddleName;
}
public void setMiddleName(String middleName) {
MiddleName = middleName;
}
public String getLastName() {
return LastName;
}
public void setLastName(String lastName) {
LastName = lastName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public Date getDob() {
return dob;
}
public void setDob(Date dob) {
this.dob = dob;
}
public String getAddress1() {
return Address1;
}
public void setAddress1(String address1) {
Address1 = address1;
}
public String getAddress2() {
return Address2;
}
public void setAddress2(String address2) {
Address2 = address2;
}
public int getEmpID() {
return empID;
}
public void setEmpID(int empID) {
this.empID = empID;
}
}
Don't capitalise the first letter of the property names if they follow the bean properties naming convention.
If your getter and setter are named getSomeProperty
and setSomeProperty
then in a template you should use someProperty
not SomeProperty
.