Как вызвать метод @RequestMapping для Контроллера с указанным URL с помощью AJAX - PullRequest
1 голос
/ 29 августа 2011

Я очень новичок в Spring и Portlet.Я хочу использовать jqgrid, чтобы показать список.Я пытаюсь вызвать метод в контроллере, который помечен @RequestMapping, но метод не вызывается

Мой контроллер имеет следующий метод

@Controller(value = "myController")
public class MyController {
    @RequestMapping(value="/myURL",method=RequestMethod.GET)
    public @ResponseBody MyDTO  initItemSearchGrid(RenderResponse response, RenderRequest request){
        MyDTO myDto=new MyDTO();
        return myDto;
    }
}

Мой код JSP с использованием AJAX

var urlink="/myURL"; /* myURL is the exact String written in value Attribute of
                              resourceMapping in Controller*/
$.ajax({
    url :urlink,
    cache: false,
    data:$('#myForm').formSerialize(),
    dataType: "json",
    type: "GET",
    contentType: "application/json; charset=utf-8",
    success: function(jsondata){
       ...
    }
});

Когда выше выполняется код AJAX, мой метод не вызывается.

1 Ответ

5 голосов
/ 29 августа 2011

Вы упоминаете портлеты в своем вопросе.Работа с Spring и портлетами немного отличается от сервлетов.

Итак, предположим, что у вас есть такой портлет

@Controller
@RequestMapping("VIEW") // VIEW mapping (as opposed to EDIT)
public class MyPortlet {
    @RenderMapping
    public ModelAndView handleRenderView(RenderRequest request, RenderResponse response) {
        ResourceURL resourceUrl = response.createResourceURL();
        resourceUrl.setResourceID("myResource"); // this is the id used to reference a @ResourceMapping
        ModelAndView ret = new ModelAndView("myPortlet");
        ret.addObject("resourceUrl", resourceUrl.toString());
        return ret;
    }

    @ResourceMapping("myResource")
    public void handleMyResource(ResourceRequest request, ResourceResponse response) {
        OutputStream out = response.getPortletOutputStream();
        // write whatever to output
    }
}

Как видите, @ResourceMapping идентифицируется по идентификатору ресурса,URL-адрес для сопоставления ресурсов может быть создан с использованием стандартных методов и классов API портлета createResourceURL() и javax.portlet.ResourceURL.

Если вы предпочитаете использовать библиотеку тегов портлета, вы также можете сгенерировать URL ресурса с помощью<portlet:resourceRequest> tag.

Ваш взгляд может выглядеть примерно так

myPortlet.jsp

...
<script>
$.ajax({
         url :${resourceUrl},
             cache: false,
             data:$('#myForm').formSerialize(),
             dataType: "json",
             type: "GET",
             contentType: "application/json; charset=utf-8",
         success: function(jsondata){
        .........   
        .........
        .........
         }
        });
</script>
...
...