Dua tombol kirim di JSP tanpa berbagai bentuk, pengontrol yang sama

Saya telah membaca topik serupa seperti ini, dan yang itu tapi tidak membantu masalah saya.

Saya membuat aplikasi web JavaEE mvc sederhana. Halaman jsp berisi formulir dengan dua bidang teks dan dua tombol. Bidang teks pertama untuk memasukkan Id, bidang teks kedua untuk memasukkan nama. Tergantung pada tombol mana yang diklik, Servlet merutekan ke metode yang sesuai (Cari berdasarkan ID atau Cari berdasarkan Nama). Metode pencarian berdasarkan id berfungsi dengan benar. Dan saya melihat jalur berikut di bilah alamat: http://localhost:8080/employees_war_exploded/ControllerServlet?textEmployeeId=1&command=Search_ID&employeeName=

Namun ada masalah dengan metode Pencarian berdasarkan nama. Itu tidak menunjukkan hasil apa pun. Inilah yang saya lihat di bilah alamat: http://localhost:8080/employees_war_exploded/ControllerServlet?textEmployeeId=&employeeName=ann&command=Search_Name

Saya kira masalahnya adalah dalam kedua kasus ia mendapatkan parameter dari kedua bidang teks ("textEmployeeId" dan "employeeName"). Bagaimana saya bisa memproses kedua input secara terpisah dalam bentuk yang sama? Mungkin ada alasan lain untuk masalah ini yang tidak saya lihat?

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

ControllerServlet.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);
            }

        }

Pembaruan: Saya mendapatkan NullPointerException untuk metode searchByName. Mungkinkah ada masalah dengan metode ini dari kelas DAO yang dipanggil dari 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 sumber
comment
mengapa tidak menggunakan dua bentuk sebagai hal yang menarik?   -  person David    schedule 13.12.2016
comment
Bisa jadi tidak ada hasil apa pun, apakah ini mengarahkan Anda ke search-by-name.jsp? Sepertinya aliran eksekusi servlet Anda keluar dari atribut perintah dan hanya mengakses atribut lain berdasarkan perintah.   -  person Zachary Craig    schedule 13.12.2016
comment
@David Saya membaca bahwa menggunakan berbagai formulir di jsp yang sama bukanlah praktik yang baik. Dan saya juga penasaran apakah ada cara untuk menyelesaikannya tanpa berbagai bentuk.   -  person Ivan T    schedule 14.12.2016
comment
@ zack6849 Saat saya menekan Search_ID semuanya berjalan dengan benar. Dan saya dialihkan ke halaman /show-employee.jsp yang menunjukkan hasil yang diharapkan. Tetapi ketika saya menekan tombol Search_Name saya mendapatkan NullPointerException. Dan itu tidak mengarahkan saya ke halaman search-by-name.jsp. Hanya ada halaman browser putih kosong.   -  person Ivan T    schedule 14.12.2016
comment
periksa untuk memastikan daftar karyawan benar-benar tidak kosong, kode Anda sepertinya akan berjalan dengan baik   -  person Zachary Craig    schedule 14.12.2016
comment
@ zack6849 Tampaknya kosong. Tapi saya tidak tahu cara memperbaikinya. Memperbarui postingan dengan implementasi metode DAO yang dipanggil dari servlet.   -  person Ivan T    schedule 14.12.2016
comment
periksa parameter permintaan Anda bukan nol atau default stringnya kosong jika String nameString = request.getParameter(employeeName) == null ? : request.getParameter(Nama Karyawan);   -  person David    schedule 14.12.2016
comment
@David Terima kasih atas bantuan Anda. Saya menemukan solusinya.. ada masalah dengan metode searchEmployees(String employeeName) dari kelas DAO. Seperti yang Anda lihat, ada baris Connection myConnection = null; tapi saya tidak mendapatkan koneksi dari Sumber Data. Jadi metode ini mengembalikan daftar kosong. Menambahkan baris berikut myConnection = dataSource.getConnection(); ke dalam blok coba memecahkan masalah.   -  person Ivan T    schedule 15.12.2016