ปุ่มส่งสองปุ่มใน JSP ที่ไม่มีหลายรูปแบบ มีคอนโทรลเลอร์เดียวกัน

ฉันได้อ่านหัวข้อที่คล้ายกันแล้ว ชอบสิ่งนี้ และ อันนั้น แต่มัน ไม่ได้ช่วยแก้ไขปัญหาของฉัน

ฉันสร้างเว็บแอป JavaEE mvc อย่างง่าย หน้า jsp มีแบบฟอร์มที่มีช่องข้อความสองช่องและปุ่มสองปุ่ม ช่องข้อความแรกสำหรับป้อนรหัส ช่องที่สองสำหรับป้อนชื่อ ขึ้นอยู่กับว่าคลิกปุ่มใด Servlet จะกำหนดเส้นทางไปยังวิธีการที่เหมาะสม (ค้นหาด้วย ID หรือค้นหาตามชื่อ) ค้นหาด้วยวิธีการ id ทำงานได้อย่างถูกต้อง และฉันเห็นเส้นทางต่อไปนี้ในแถบที่อยู่: http://localhost:8080/employees_war_exploded/ControllerServlet?textEmployeeId=1&command=Search_ID&employeeName=

อย่างไรก็ตาม มีปัญหากับวิธีการค้นหาตามชื่อ มันไม่แสดงผลใดๆ นี่คือสิ่งที่ฉันเห็นในแถบที่อยู่: http://localhost:8080/employees_war_exploded/ControllerServlet?textEmployeeId=&employeeName=ann&command=Search_Name

ฉันเดาว่าปัญหาคือในทั้งสองกรณีจะได้รับพารามิเตอร์ของทั้งสองช่องข้อความ ("textEmployeeId" และ "employeeName") ฉันจะทำให้ประมวลผลทั้งสองอินพุตแยกกันในรูปแบบเดียวกันได้อย่างไร อาจมีเหตุผลอื่นสำหรับปัญหาที่ฉันไม่เห็นใช่ไหม

<form class="form-style" name="form1">
  <label>ID:
    <input type="text" name="textEmployeeId" value="${tempEmployee.id}" />
  </label>
  <input type="submit" name="command" value="Search_ID">
  <br>
  <br>

  <label>Name:
    <input type="text" name="employeeName" value="${tempEmployee.name}" />
  </label>
  <input type="submit" name="command" value="Search_Name">
  <br>
  <br>
</form>

คอนโทรลเลอร์Servlet.java

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        try {
            String theCommand = request.getParameter("command");

            if (theCommand == null) {
                theCommand = "EMPLOYEE_LIST";
            }

            // route to the appropriate method
            switch (theCommand) {
                case "EMPLOYEE_LIST":
                    listEmployees(request, response);
                    break;   
                case "Search_ID":
                    searchById(request, response);
                    break;
                case "Search_Name":
                    searchByName(request, response);
                    break;
                default:
                    listEmployees(request, response);
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
private void searchByName(HttpServletRequest request, HttpServletResponse response) throws Exception {
        String nameString = request.getParameter("employeeName");

        List<Employee> namedEmployees = employeeDbUtil.searchEmployees(nameString);
        request.setAttribute("EMPLOYEES", namedEmployees);

        RequestDispatcher dispatcher = request.getRequestDispatcher("/search-by-name.jsp");
        dispatcher.forward(request, response);


    }


 private void searchById(HttpServletRequest request, HttpServletResponse response) throws Exception {

            String textString = request.getParameter("textEmployeeId");

             Employee theEmployee = employeeDbUtil.getEmployeeById(textString);
                request.setAttribute("THE_EMPLOYEE", theEmployee);

                RequestDispatcher dispatcher = request.getRequestDispatcher("/show-employee.jsp");
                dispatcher.forward(request, response);
            }

        }

อัปเดต: ฉันได้รับ NullPointerException สำหรับวิธี searchByName อาจมีปัญหากับวิธีนี้จากคลาส DAO ที่ถูกเรียกจาก ControllerServlet หรือไม่

public List<Employee> searchEmployees(String employeeName) throws Exception {
    List<Employee> employeeList = new ArrayList();

    Connection myConnection = null;
    PreparedStatement preparedStatement = null;
    ResultSet resultSet = null;

    try {
        employeeName += "%";
        preparedStatement = myConnection.prepareStatement("SELECT * FROM employees WHERE LOWER(name) like LOWER(?)");
        preparedStatement.setString(1, employeeName);
        resultSet = preparedStatement.executeQuery();
        while (resultSet.next()) {
            Employee tempEmployee = resultSetToEmployee(resultSet);
            employeeList.add(tempEmployee);
        }
        return employeeList;
    }
    finally {
        DbExceptions.close(resultSet);
        DbExceptions.close(preparedStatement);
        DbExceptions.close(myConnection);
    }

}

person Ivan T    schedule 13.12.2016    source แหล่งที่มา
comment
ทำไมไม่ใช้สองรูปแบบเป็นเรื่องที่น่าสนใจล่ะ?   -  person David    schedule 13.12.2016
comment
อาจเป็นไปได้ว่าไม่มีผลลัพธ์ใดๆ มันเปลี่ยนเส้นทางคุณไปที่ search-by-name.jsp หรือไม่ ดูเหมือนว่าโฟลว์การดำเนินการเซิร์ฟเล็ตของคุณออกจากแอตทริบิวต์คำสั่ง และเพียงเข้าถึงแอตทริบิวต์อื่นๆ ตามคำสั่ง   -  person Zachary Craig    schedule 13.12.2016
comment
@David ฉันอ่านเจอว่าการใช้หลายรูปแบบใน jsp เดียวกันนั้นไม่ใช่แนวปฏิบัติที่ดี และฉันก็อยากรู้ด้วยว่ามีวิธีแก้ไขโดยไม่ต้องมีหลายรูปแบบหรือไม่   -  person Ivan T    schedule 14.12.2016
comment
@ zack6849 เมื่อฉันกด Search_ID ทุกอย่างดำเนินการอย่างถูกต้อง และฉันถูกเปลี่ยนเส้นทางไปยังหน้า /show-employee.jsp ที่แสดงผลลัพธ์ที่คาดหวัง แต่เมื่อฉันกดปุ่ม Search_Name ฉันได้รับ NullPointerException และมันไม่เปลี่ยนเส้นทางฉันไปยังหน้า search-by-name.jsp มีเพียงหน้าเบราว์เซอร์สีขาวว่างเปล่า   -  person Ivan T    schedule 14.12.2016
comment
ตรวจสอบเพื่อให้แน่ใจว่ารายชื่อพนักงานไม่ว่างเปล่า โค้ดของคุณดูเหมือนว่าควรจะทำงานได้ดี   -  person Zachary Craig    schedule 14.12.2016
comment
@ zack6849 ดูเหมือนจะว่างเปล่า แต่ฉันไม่สามารถทราบวิธีแก้ไขปัญหานี้ได้ อัปเดตโพสต์โดยใช้วิธี DAO ที่ถูกเรียกจากเซิร์ฟเล็ต   -  person Ivan T    schedule 14.12.2016
comment
ตรวจสอบพารามิเตอร์คำขอของคุณไม่เป็นโมฆะหรือตั้งค่าเริ่มต้นให้สตริงว่างเปล่าหากเป็น String nameString = request.getParameter(employeeName) == null ? : request.getParameter(ชื่อพนักงาน);   -  person David    schedule 14.12.2016
comment
@David ขอบคุณสำหรับความช่วยเหลือของคุณ ฉันพบวิธีแก้ไข .. มีปัญหากับวิธี searchEmployees(String employeeName) จากคลาส DAO อย่างที่คุณเห็นมีบรรทัด Connection myConnection = null; แต่ฉันไม่ได้รับการเชื่อมต่อจากแหล่งข้อมูล ดังนั้นเมธอดจึงส่งคืนรายการว่าง การเพิ่มบรรทัดต่อไปนี้ myConnection = dataSource.getConnection(); ลงในบล็อก try ช่วยแก้ปัญหาได้   -  person Ivan T    schedule 15.12.2016