Заново отобразить элементы в 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 шт):

Автор решения: Roman C

Чтобы обновить данные на 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:
     // сортируем по умолчанию
}
→ Ссылка