Patrick Brian Garcia
Patrick Brian Garcia

Reputation: 45

Why won't the link go to controller, Spring mvc?

I am having trouble in redirecting the link of below code to my controller class.

This is the code:

 $('#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>");
                    }
                }
            ],

This is my handler for the controller class:

  @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); 
}

This is my updated code.

The link to the controller is

$(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>");

The controller is

 @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";
}

I tried to create a new handler to test it, Still, The same error appears.

Upvotes: -1

Views: 75

Answers (1)

Alien
Alien

Reputation: 15878

Ensure that href value for your link is getting build properly.

Go to browser elements tab and check the value for link href and make sure that it is not breaking.

enter image description here

or you can do that using jquery or javascript like below.

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

})

UPDATE: As you provided link in one of my comments, it is clear that your request parameters names are not matching with the controller one.

link :

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

Controller :

@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,

You are using wrong parameter names in request so change all the parameters to controller one.

For example sender_assign you are sending as assign_sender and so on.

SO to make it work use sender_assign instead of assign_sender and all other parameters also from client side(anchor href)

Upvotes: 0

Related Questions