2016-02-18 39 views
3

我在jsp表中更新输入的值时遇到问题,我不知道我应该在哪里放置form actionc:forEach以便一切都会变得易于理解。哪里有问题?Spring MVC - 如何使用JSP表更新数据库中的行?

在这种情况下,输入的数值接收null,之后点击“编辑”中的每一行是空:

<div class="forms"> 
    <div class="selectr"> 
    <p style="font-size: 13"> 
    <table border="1"> 
     <tr style="font-size: 13"> 
      <td>ID</td> 
      <td>First name</td> 
      <td>Last name</td> 
      <td>Gender</td> 
      <td>Position</td> 
      <td>Salary</td> 
      <td>Phone number</td> 
      <td>Address</td> 
      <td>Action</td> 
     </tr> 
     <c:forEach items="${employees}" var="employee"> 
      <tr style="font-size: 10"> 
       <td><input disabled style="width: 17px" type="text" name="id" value="${employee.id}"></td> 
       <td><input style="width: 75px" type="text" name="name" value="${employee.name}"></td> 
       <td><input style="width: 75px" type="text" name="lastName" value="${employee.lastName}"></td> 
       <td><input style="width: 60px" type="text" name="gender" value="${employee.gender}"></td> 
       <td><input style="width: 80px" type="text" name="position" value="${employee.position}"></td> 
       <td><input style="width: 60px" type="text" name="salary" value="${employee.salary}"></td> 
       <td><input style="width: 100px" type="text" name="phoneNumber" value="${employee.phoneNumber}"></td> 
       <td><input style="width: 160px" type="text" name="address" value="${employee.address}"></td> 
       <td><form action="/VirtualClinic/employeelist.html?editEmployee=${employee.id}" method="POST"><input type="submit" value="Edit"/></td> 
      </tr> 
      </c:forEach> 
    </table> 
    </div> 

在这种情况下输入的值不为空(我System.out.println(employee.getName()检查,但仍然他们不想更新,因为点击更新后的值从数据库恢复到默认值):

<form action="/VirtualClinic/employeelist.html?editEmployee=" method="POST"> 
<div class="forms"> 
    <div class="selectr"> 
    <p style="font-size: 13"> 
    <table border="1"> 
     <tr style="font-size: 13"> 
      <td>ID</td> 
      <td>First name</td> 
      <td>Last name</td> 
      <td>Gender</td> 
      <td>Position</td> 
      <td>Salary</td> 
      <td>Phone number</td> 
      <td>Address</td> 
      <td>Action</td> 
     </tr> 
     <c:forEach items="${employees}" var="employee"> 
      <tr style="font-size: 10"> 
       <td><input disabled style="width: 17px" type="text" name="id" value="${employee.id}"></td> 
       <td><input style="width: 75px" type="text" name="name" value="${employee.name}"></td> 
       <td><input style="width: 75px" type="text" name="lastName" value="${employee.lastName}"></td> 
       <td><input style="width: 60px" type="text" name="gender" value="${employee.gender}"></td> 
       <td><input style="width: 80px" type="text" name="position" value="${employee.position}"></td> 
       <td><input style="width: 60px" type="text" name="salary" value="${employee.salary}"></td> 
       <td><input style="width: 100px" type="text" name="phoneNumber" value="${employee.phoneNumber}"></td> 
       <td><input style="width: 160px" type="text" name="address" value="${employee.address}"></td> 
       <td><input type="submit" value="Edit"/></td> 
      </tr> 
      </c:forEach> 
    </table> 
    </div> 
</div> 
</form> 

DAO:

public void updateEmployee(Employee employee) { 
    String query = "update virtualclinic.employee SET name=?, lastname=?, gender=?," 
      + "position=?, salary=?, phonenumber=?, address=? WHERE idemployee=?"; 
    Connection con = null; 
    PreparedStatement ps = null; 
    try{ 
     con = dataSource.getConnection(); 
     ps = con.prepareStatement(query); 
     ps.setString(1, employee.getName()); 
     ps.setString(2, employee.getLastName()); 
     ps.setString(3, employee.getGender()); 
     ps.setString(4, employee.getPosition()); 
     ps.setString(5, employee.getSalary()); 
     ps.setString(6, employee.getPhoneNumber()); 
     ps.setString(7, employee.getAddress()); 
     ps.setString(8, employee.getId()); 

     int out = ps.executeUpdate();      

    }catch(SQLException e){ 
     e.printStackTrace(); 
    }finally{ 
     try { 
      ps.close(); 
      con.close(); 
     } catch (SQLException e) { 
      e.printStackTrace(); 
     } 
    } 

} 

服务:

public void updateEmployee(Employee employee) { 
    ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("clinicconfig.xml"); 
    employeeDAO = ctx.getBean("employeeDAO", EmployeeDAOImpl.class);    

    employeeDAO.updateEmployee(employee); 

} 

控制器:

@RequestMapping(value = "/employeelist.html", method = RequestMethod.POST) 
public ModelAndView deleteEmployee(Model model, @ModelAttribute("employee") Employee employee, @RequestParam String editEmployee) throws SQLException { 

    setAppContext(); 

    clinicService.updateEmployee(employee); 

    System.out.println(employee.getName()); 

    List<Employee> employees = clinicService.getAllEmployees(); 
    model.addAttribute("employees", employees); 

    ModelAndView mstaff = new ModelAndView("EmployeeList"); 
    return mstaff; 

} 
+2

示例:http://www.mkyong.com/spring-mvc/spring-mvc-form-handling-example/ – dit

+0

更好地使用Ajax而不是单独更新每行。 否则,你必须改变你的HTML设计,因为表单动作写在表格的结尾,但表单元素应该在表单标签内。 –

+0

使用ajax更新行或创建编辑按钮,该按钮显示另一页上的现有数据,然后使用单个表单更新数据 –

回答

0

假设这是在项目中的第一个JSP。另外,我没有看到您的tld导入,但EL和JSTL问题最常见的原因之一是您使用的JSP版本,您使用的JSTL版本以及您拥有的版本之间的配置不匹配在部署描述符(web.xml)中声明您的Web应用程序。

对于JSP 2.1容器(例如Tomcat 6),您应该使用JSTL 1.2,并且应该使用Servlets 2.5 XML Schema将您的Web应用程序声明为Servlets 2.5 Web应用程序。

对于JSP 2.0容器(例如Tomcat 5),您应该使用JSTL 1.1,并且应该使用Servlets 2.4 XML Schema将您的Web应用程序声明为Servlets 2.4 Web应用程序。

相关问题