为什么链接不会转到控制器,Spring MVC?

时间:2018-11-20 06:06:44

标签: java 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";
}

我试图创建一个新的处理程序进行测试,但是,仍然出现相同的错误。

1 个答案:

答案 0 :(得分:1)

确保正确建立链接的href值。

转到浏览器元素标签,并检查链接href的值,并确保其没有损坏。

enter image description here

或者您可以使用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的身份发送,依此类推。

SO使其使用sender_assign代替assign_sender,并且所有其他参数也来自客户端(anchor href)