У меня возникли проблемы с перенаправлением ссылки из приведенного ниже кода на мой класс контроллера.
Это код:
$('#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";
}
Я попытался создать новый обработчик для проверки, но все равно появляется та же ошибка.
@secretsuperstar Я также проверил свою консоль, и нет никаких ошибок, извините, я пропустил эту часть
Я имею в виду, каков ответ на звонок во вкладке сети (если вы используете хром)
Просто интересно, почему вы делаете redirect в своем контроллере
@secretsuperstar это 404.
Итак, ваша конечная точка неверна на стороне клиента
@secretsuperstar Я использую тот же код на другой странице. Я только что отредактировал часть кода, он работает нормально, но я не знаю, что с этим не так
tbh, непонятно, что ты делаешь. Вы даете нерелевантный код. Вы не можете получить доступ к созданной вами ссылке? зачем ты его тогда создаешь? создайте тот, к которому вы можете получить доступ, т.е. сначала найдите рабочую версию, которая фактически указывает на вашу конечную точку. Ваша переадресация указывает на другое место, не указанное в вашем коде.
@sarief, если вы читали предыдущие комментарии. Я сказал, что использовал тот же код, что и рабочий, я просто редактировал переменные, названия и т. д. Вот почему я разместил это, потому что не знаю, что делать. Если бы вы могли мне помочь, тогда спасибо :)
Прочитал, но понятнее не делает. У вас там слишком много несвязанного кода. вы должны указать только URL-адрес и конечную точку. Если у вас есть работающий аналог - тем более. Помните, что есть также конфигурация и другие аннотации, которые могут повлиять на конечный результат. И ничего этого здесь нет
у вас есть <%@ page isELIgnored = "false"%> вверху вашей страницы (при условии, что вы используете jsp)
@secretsuperstar Я попытался разместить его, но он все равно не попадает в контроллер
если это все еще 404, я бы посоветовал сначала попытаться получить правильную конечную точку. вы можете попробовать зайти в браузер и найти его.
Здесь $(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>"); вы используете assignSpecificMessage, но внутри js вы используете assignMessageTicket. ваш вопрос слишком противоречивый.
@secretsuperstar assignSpecific - это обновленная версия. попробуйте проверить последние два кода, которые я опубликовал. Они такие же. Я даже пробовал дальше экспериментировать с кодом. Я удалил все параметры, даже предварительную авторизацию, и он по-прежнему не поступает в контроллер. интересно, почему
это не проблема с авторизацией или параметрами. поскольку это причина 404, это означает, что в вашем сценарии js указан неверный URL. Можете ли вы попробовать попасть в url в браузере и посмотреть, что произойдет.
http://localhost:8084/cwms/assignSpecificMessage?assign_sender=%2B639062165304&assign_portId=6&messageId=15416427366198288583&assign_ticketNumber=ADM-1809-00473 работает? какой на выходе?




Убедитесь, что значение 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)
Не ломается, как я проверял.
Вы можете вставить сюда полный тег <a>
@alien зацени
возникла проблема ... в контроллере вы используете sender_assign, но в ссылке href это assign_sender одинаково для всех параметров
@Alien assign_sender - это RequestParam, вызывает ли он 404? Я чувствую, что это должно вызвать другую ошибку
@alien Обновить мой вопрос проверить
@alien Я даже пытался удалить PreAuthorize и параметры. Он все равно не перейдет к контроллеру
Можете ли вы проверить в браузере, есть ли ошибки.