【问题标题】:How to do edit in mysql using JSP page?如何使用 JSP 页面在 mysql 中进行编辑?
【发布时间】:2017-01-05 11:00:29
【问题描述】:

这是 EmployeeDao.java 文件。

public Employee getEmployeeById(String employeeId){
    System.out.println("IN getEmployeeById");
    Employee employee = new Employee();
    try {
        PreparedStatement preparedStatement = conn.prepareStatement("select * from login where email=?");
        preparedStatement.setString(1, employeeId);
        ResultSet rs = preparedStatement.executeQuery();
        System.out.println(rs);
        if(rs.next()){
            employee.setFirstname(rs.getString("firstName"));
            System.out.println(""+employee.getFirstname());
            employee.setLastname(rs.getString("lastName"));
            System.out.println(""+employee.getLastname());
            employee.setEmail(rs.getString("email"));
            System.out.println(""+employee.getEmail());
            employee.setStatus(rs.getBoolean("status"));
        }
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return employee;    
}

这是 EmployeeController.java 文件。

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    String forward = "";
    String action = request.getParameter("action");

    if(action.equalsIgnoreCase("delete")){
        String employeeId = request.getParameter("employeeId");
        dao.deleteEmployee(employeeId);
        forward = employee_listing ;
        request.setAttribute("employees", dao.getAllEmployees());
    }else if(action.equalsIgnoreCase("edit")){
        forward = employee_detail ;
        String employeeId = request.getParameter("employeeId");
        Employee employee = dao.getEmployeeById(employeeId);
        request.setAttribute("employee", employee);
    }else if(action.equalsIgnoreCase("listEmployee")){
        forward = employee_listing;
        request.setAttribute("employees", dao.getAllEmployees());
    }
    else{
        forward = dashboard;
    }

    RequestDispatcher view  = request.getRequestDispatcher(forward);
    view.forward(request, response);
}

这是员工详细信息页面。

<form class="form-horizontal" method="post" action="EmployeeController" name="frmAddEmployee">  
                                <% 
                                    String action = request.getParameter("action");
                                    System.out.println(action);
                                %>
                                    <% while (rs.next()) { %>

                                <div class="form-group">
                                    <label for="" class="col-sm-4 control-label">First Name</label>
                                    <div class="col-sm-8">
                                      <input type="text" class="form-control" id="" value="<%= rs.getString("firstName") %>" >
                                    </div>
                                </div>
                                <div class="form-group">
                                    <label for="" class="col-sm-4 control-label">Last Name</label>
                                    <div class="col-sm-8">
                                      <input type="text" class="form-control" id="" value="<%= rs.getString("lastName") %>"  >
                                    </div>
                                </div>
                                <div class="form-group">
                                    <label for="" class="col-sm-4 control-label">Email</label>
                                    <div class="col-sm-8">
                                      <input type="email" class="form-control" id="" value="<%= rs.getString("email") %>" >
                                      <% } %>
                                    </div>
                                </div>
                                <div class="form-group">
                                    <label class="col-sm-4 control-label">Employee Status</label>
                                    <div class="col-sm-8">
                                        <label class="switch">
                                            <input type="checkbox" checked>
                                            <div class="slider round"></div>
                                        </label>
                                    </div>
                                </div>
                                <div class="form-group">
                                    <div class="col-sm-4"></div>
                                    <div class="col-sm-8">
                                        <input type="submit" name="submit" value="Update" class="btn btn-primary"> &nbsp; <input type="reset" name="cancel" value="Cancel" class="btn btn-primary">
                                    </div>
                                </div>
                            </form> 

所以当我点击编辑按钮时,它将被重定向到员工详细信息页面,我得到了具体的员工详细信息。

但在编辑特定员工详细信息并单击“更新”按钮后, 我得到了白屏,没有别的。 该页面网址是:: "http://localhost:8000/SampleLogin/EmployeeController"

那么我该如何解决这个问题并继续前进。

【问题讨论】:

  • 看看@Ninja Coder 的回答——他是对的,至少你在 html 中有一个错误。为了更简洁的编码实践,最好在 doGet 和 doPost 方法之间分离读取和写入请求的处理。

标签: java mysql jsp


【解决方案1】:

你需要做的就是替换

<input type="submit" name="submit" value="Update" class="btn btn-primary">

与:input type="submit" name="action" value="edit" class="btn btn-primary">

【讨论】:

  • 它无法解决原来的问题,因为 doGet 无法使用 POST 方法
  • doPost 如果没有替换自动生成的存根,则在 doGet 内部调用。他的jsp中没有以action命名的输入参数,所以他只需要替换他的编辑按钮名称和值
  • 但是doPost没有调用doGet,servlet接收到doPost
  • 啊,如果扩展 DefaultServlet 类,则从 doPost 调用 doGet
【解决方案2】:

首先 - 不要使用 doGet 来更新数据。

你的表单方法是POST

<form class="form-horizontal" method="post" ...>

因此,您需要在控制器的 doPost 方法中执行所有更新魔法。

这里有一些关于使用 servlet 进行 CRUD 的有用提示 - https://stackoverflow.com/tags/servlets/info

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-21
    • 1970-01-01
    • 2020-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多