Заново отобразить элементы в JSP
Есть некоторая модель с данными, из которой берутся значения для вывода с помощью JSTL на JSP странице.
Новый код js:
$(function (){
$("#default").on('click',function(){
$("#contentForm").action =$("#contentForm").action + '?sort=default';
$("#contentForm").submit();
});
$("#increase").on('click',function(){
$("#contentForm").action =$("#contentForm").action + '?sort=increase';
$("#contentForm").submit();
});
$("#decrease").on('click',function(){
$("#contentForm").action =$("#contentForm").action + '?sort=decrease';
$("#contentForm").submit();
});
});
Код формы:
<div class="dropdown">
<button class="dropbtn">Цена</button>
<form class="dropdown-content" id="contentForm" action="SortData">
<input type="button" id="default">По умолчанию</input>
<input type="button" id="increase">По возрастанию</input>
<input type="button" id="decrease">По убыванию</input>
</form>
</div>
Код сервлета:
@WebServlet(value = "/SortData")
public class SortServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Info Info = new Info();
String sort = req.getParameter("sort");
switch(sort == null?"default":sort) {
case "increase":
req.setAttribute("Model", Info.getSortedByIncreaseModel());
req.getRequestDispatcher("index.jsp").forward(req, resp);
break;
case "decrease":
req.setAttribute("Model", Info.getSortedByDecreaseModel());
req.getRequestDispatcher("index.jsp").forward(req, resp);
break;
case "default":
default:
req.setAttribute("Model", Info.getBaseModel());
req.getRequestDispatcher("index.jsp").forward(req, resp);
}
}
}
В сервлет приходит параметр search = null, и не отрабатывает js на странице. Скрипт пробовал помещать в разных местах, ни в <head> ни в самой форме не отрабатывает, точнее определяет какая кнопка была нажата но action не меняется, в адресной строке http://localhost:8080/farma_war_exploded/SortData?
Ответы (1 шт):
Чтобы обновить данные на JSP с помощью сервлета, необязательно делать Ajax запросы типа $.get(), а также нет надобности перегружать страницу. Вместо этого надо передать параметр на сервер, который определяет способ сортировки. Это можно сделать разными способами. Я приведу здесь один, который меняет action атрибут формы.
$(function (){
$("#default").on('click',function(){
$(form).action=$(form).action+'?sort=default';
$(form).submit();
});
$("#increase").on('click',function(){
$(form).action=$(form).action+'?sort=increase';
$(form).submit();
});
$("#decrease").on('click',function(){
$(form).action=$(form).action+'?sort=decrease';
$(form).submit();
});
});
На сервере надо получить параметр sort.
String sort = req.getParameter("sort");
switch(sort == null?"default":sort) {
case "increase":
// сортируем по возрастанию
break;
case "decrease":
// сортируем по убыванию
break;
case "default":
default:
// сортируем по умолчанию
}