Почему ссылка не идет на контроллер Spring mvc?

У меня возникли проблемы с перенаправлением ссылки из приведенного ниже кода на мой класс контроллера.

Это код:

 $('#ticketDT').DataTable({
            "dom": '<"toolbar">frtip',
            "responsive": true,
            "ordering": false,
            "scrollY": "300px",
            "scrollCollapse": true,
            "ajax": "ticketList.json",
            "bDestroy": true,
            "deferRender": true,
            "aoColumns": [
                {"mData": "ticketNumber"},
                {"mData": "category"},
                {"mData": "subcategory"},
                {"mData": "status"},
                {"mData": "requestedBy"},
                {"mData": "ticketNumber",
                    "fnCreatedCell": function (nTd, sData, oData, iRow, iCol) {
                        $(nTd).html("<a class='linkColor' href='${pageContext.request.contextPath}/assignMessageTicket?sender_assign = " + encodeURIComponent(sender) + "&portId_assign = "+portId+"&messageId = " + encodeURIComponent(messageId) + "&ticketNumber_assign = " + encodeURIComponent(oData.ticketNumber) + "'><span data-toggle='tooltip' title='Assign'><i class='ti-plus btn btn-simple btn-assign btn-icon' data-mode='assignTicket'></i></span></a>");
                    }
                }
            ],

Это мой обработчик класса контроллера:

  @RequestMapping(value = {"assignMessageTicket"}, method = RequestMethod.GET)
@PreAuthorize("hasAnyRole('CWO_ENCODER,ADMIN')")
public ModelAndView assignMessageTicket(@RequestParam(value = "sender_assign",required = true) String sender,
        @RequestParam(value = "portId_assign",required = true) String portId,@RequestParam(value = "messageId",required = true) String messageId,
        @RequestParam(value = "ticketNumber_assign",required = true) String ticketNumber,
        ModelMap model,HttpServletRequest request) throws UnsupportedEncodingException {
    String currentUser = request.getRemoteUser();
    SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/YYYY");
    Date date = new Date();
    String currentDate = formatter.format(date);
    dashboardService.assignMessageSmsMessages(messageId,ticketNumber);
    dashboardService.assignMessageSmsReply(messageId,ticketNumber);
    dashboardService.addRecentlyAssignedMessage(sender,portId,ticketNumber,currentUser,currentDate);
    String newSender = URLEncoder.encode(sender, "UTF-8").replaceAll("\\+", "%2B");
    String newPortId = URLEncoder.encode(portId, "UTF-8").replaceAll("\\+", "%2B");
    boolean hasError = false;
    model.clear();

    return new ModelAndView("redirect:conversation?sender = "+newSender+"&portId = "+newPortId+"&hasError = "+hasError); 
}

Это мой обновленный код.

Ссылка на контроллер есть

$(nTd).html("<a class='linkColor' href='${pageContext.request.contextPath}/assignSpecificMessage?messageId = "+messageId+"&sender_assign = " + encodeURIComponent(sender) + "&portId_assign = "+portId+"&ticketNumber_assign = " + encodeURIComponent(oData.ticketNumber) + "'><span data-toggle='tooltip' title='Assign'><i class='ti-plus btn btn-simple btn-assign btn-icon' data-mode='assignMessageTicket'></i></span></a>");

Контроллер

 @RequestMapping(value = {"assignSpecificMessage"}, method = RequestMethod.GET)
@PreAuthorize("hasAnyRole('CWO_ENCODER,ADMIN')")
public String assignSpecific(@RequestParam(value = "sender_assign",required = true) String sender,
        @RequestParam(value = "portId_assign",required = true) String portId,@RequestParam(value = "messageId",required = true) String messageId,
        @RequestParam(value = "ticketNumber_assign",required = true) String ticketNumber,
        ModelMap model,HttpServletRequest request) {


    return "conversation";
}

Я попытался создать новый обработчик для проверки, но все равно появляется та же ошибка.

Можете ли вы проверить в браузере, есть ли ошибки.

Shiva 20.11.2018 07:12

@secretsuperstar Я также проверил свою консоль, и нет никаких ошибок, извините, я пропустил эту часть

Patrick Brian Garcia 20.11.2018 07:13

Я имею в виду, каков ответ на звонок во вкладке сети (если вы используете хром)

Shiva 20.11.2018 07:14

Просто интересно, почему вы делаете redirect в своем контроллере

Shiva 20.11.2018 07:16

@secretsuperstar это 404.

Patrick Brian Garcia 20.11.2018 07:22

Итак, ваша конечная точка неверна на стороне клиента

Shiva 20.11.2018 07:22

@secretsuperstar Я использую тот же код на другой странице. Я только что отредактировал часть кода, он работает нормально, но я не знаю, что с этим не так

Patrick Brian Garcia 20.11.2018 07:23

tbh, непонятно, что ты делаешь. Вы даете нерелевантный код. Вы не можете получить доступ к созданной вами ссылке? зачем ты его тогда создаешь? создайте тот, к которому вы можете получить доступ, т.е. сначала найдите рабочую версию, которая фактически указывает на вашу конечную точку. Ваша переадресация указывает на другое место, не указанное в вашем коде.

Andrii Plotnikov 20.11.2018 07:27

@sarief, если вы читали предыдущие комментарии. Я сказал, что использовал тот же код, что и рабочий, я просто редактировал переменные, названия и т. д. Вот почему я разместил это, потому что не знаю, что делать. Если бы вы могли мне помочь, тогда спасибо :)

Patrick Brian Garcia 20.11.2018 07:56

Прочитал, но понятнее не делает. У вас там слишком много несвязанного кода. вы должны указать только URL-адрес и конечную точку. Если у вас есть работающий аналог - тем более. Помните, что есть также конфигурация и другие аннотации, которые могут повлиять на конечный результат. И ничего этого здесь нет

Andrii Plotnikov 20.11.2018 08:08

у вас есть <%@ page isELIgnored = "false"%> вверху вашей страницы (при условии, что вы используете jsp)

Shiva 20.11.2018 08:34

@secretsuperstar Я попытался разместить его, но он все равно не попадает в контроллер

Patrick Brian Garcia 20.11.2018 09:09

если это все еще 404, я бы посоветовал сначала попытаться получить правильную конечную точку. вы можете попробовать зайти в браузер и найти его.

Shiva 20.11.2018 09:16

Здесь $(nTd).html("<a class='linkColor' href='${pageContext.request.contextPath}/assignSpecificMessa‌​ge?messageId = "+messa‌​geId+"&sender_assign‌​ = " + encodeURIComponent(sender) + "&portId_assign = "+portId+"&ticketNumber_assign = " + encodeURIComponent(oData.ticketNumber) + "'><span data-toggle='tooltip' title='Assign'><i class='ti-plus btn btn-simple btn-assign btn-icon' data-mode='assignMessageTicket'></i></span></a>"); вы используете assignSpecificMessage, но внутри js вы используете assignMessageTicket. ваш вопрос слишком противоречивый.

Shiva 20.11.2018 09:22
assignSpecificMessage или assignMessageTicket, какой из них правильный? или оба действительны?
Shiva 20.11.2018 09:24

@secretsuperstar assignSpecific - это обновленная версия. попробуйте проверить последние два кода, которые я опубликовал. Они такие же. Я даже пробовал дальше экспериментировать с кодом. Я удалил все параметры, даже предварительную авторизацию, и он по-прежнему не поступает в контроллер. интересно, почему

Patrick Brian Garcia 20.11.2018 09:42

это не проблема с авторизацией или параметрами. поскольку это причина 404, это означает, что в вашем сценарии js указан неверный URL. Можете ли вы попробовать попасть в url в браузере и посмотреть, что произойдет.

Shiva 20.11.2018 09:46

http://localhost:8084/cwms/assignSpecificMessage?assign_send‌​er=%2B639062165304&a‌​ssign_portId=6&messa‌​geId=154164273661982‌​88583&assign_ticketN‌​umber=ADM-1809-00473 работает? какой на выходе?

Shiva 20.11.2018 09:48
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
18
59
1

Ответы 1

Убедитесь, что значение href для вашей ссылки создается правильно.

Перейдите на вкладку элементов браузера, проверьте значение href ссылки и убедитесь, что она не нарушается.

или вы можете сделать это с помощью jquery или javascript, как показано ниже.

$("#idOfAnchorTag").on("click", function(){
   var href = $(this).find('a').attr('href');
  ....

})

Обновлено: Как вы указали ссылку в одном из моих комментариев, ясно, что имена параметров вашего запроса не совпадают с именем контроллера.

ссылка на сайт :

http://localhost:8084/cwms/assignSpecificMessage?assign_sender=%2B639062165304&assign_portId=6&messageId=15416427366198288583&assign_ticketNumber=ADM-1809-00473

Контроллер:

@RequestParam(value = "sender_assign",required = true) String sender,
        @RequestParam(value = "portId_assign",required = true) String portId,@RequestParam(value = "messageId",required = true) String messageId,
        @RequestParam(value = "ticketNumber_assign",required = true) String ticketNumber,

Вы используете неправильные имена параметров в запросе, поэтому измените все параметры на один контроллер.

Например sender_assign вы отправляете как assign_sender и так далее.

Чтобы заставить его работать, используйте sender_assign вместо assign_sender, а все другие параметры также со стороны клиента (привязка href)

Не ломается, как я проверял.

Patrick Brian Garcia 20.11.2018 07:41

Вы можете вставить сюда полный тег <a>

Alien 20.11.2018 07:42
локальный: 8084 / cwms /…
Patrick Brian Garcia 20.11.2018 07:54

@alien зацени

Patrick Brian Garcia 20.11.2018 07:54

возникла проблема ... в контроллере вы используете sender_assign, но в ссылке href это assign_sender одинаково для всех параметров

Alien 20.11.2018 08:03

@Alien assign_sender - это RequestParam, вызывает ли он 404? Я чувствую, что это должно вызвать другую ошибку

Shiva 20.11.2018 08:26

@alien Обновить мой вопрос проверить

Patrick Brian Garcia 20.11.2018 08:48

@alien Я даже пытался удалить PreAuthorize и параметры. Он все равно не перейдет к контроллеру

Patrick Brian Garcia 20.11.2018 09:42

Другие вопросы по теме