Я прочитал похожие темы вот так и тот, но он не помог с моей проблемой.
Я создал простое веб-приложение JavaEE mvc. Страница jsp содержит форму с двумя текстовыми полями и двумя кнопками. Первое текстовое поле для ввода идентификатора, второе для ввода имени. В зависимости от того, какая кнопка нажата, сервлет направляется к соответствующему методу (поиск по идентификатору или поиск по имени). Поиск по методу 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>
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);
}
}
Обновление: я получаю исключение 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);
}
}
search-by-name.jsp
? Похоже, что ваш поток выполнения сервлета отключается от атрибута команды и просто обращается к другим атрибутам на основе команды. - person Zachary Craig   schedule 13.12.2016/show-employee.jsp
страницу с ожидаемым результатом. Но когда я нажимаю кнопку Search_Name, я получаю исключение NullPointerException. И это не перенаправляет меня на страницуsearch-by-name.jsp
. Там просто пустая белая страница браузера. - person Ivan T   schedule 14.12.2016searchEmployees(String employeeName)
из класса DAO. Как видите, есть строкаConnection myConnection = null;
, но я не получаю соединения с DataSource. Таким образом, метод вернул пустой список. Добавление следующей строкиmyConnection = dataSource.getConnection();
в блок try решило проблему. - person Ivan T   schedule 15.12.2016