繁体   English   中英

jQuery发布到Spring控制器以返回Java bean进行jstl解析

[英]Jquery post to Spring controller to return java bean for jstl parsing

我是jquery和SpringMVC的新手。 我使用jquery在用户单击href后提交请求。 服务器处理请求后,将显示一个模式弹出窗口,其中包含来自服务器的详细信息。

$.post(taskSrchURL, function(data) {
  $('#popupmodal').modal('show');
});

这是控制器:

@RequestMapping(value = "/api/task/{id}", method =    
{RequestMethod.POST})
public ModelAndView searchDetails(@PathVariable("id") String 
id,
HttpServletRequest request, HttpServletResponse response)
        throws SearchException, ApplicationException {

Details details = service.getDetails(id, request, response);

prepareResponse(request, response, taskDetails);
ModelAndView modelAndView = new ModelAndView("details ");
modelAndView.addObject("details ", details);
return modelAndView;

我期望响应返回时可以访问“详细信息”对象,但是,我不确定如何访问它。 我希望能够使用jstl标记来引用数据,因为它很复杂,需要在几个选项卡上显示。

然而,

<c:out value="${details.id}"/>

不起作用。 我看到了很多示例,这些示例将ModalAndView中的“数据”设置为div的html元素,但是我不想这样做。

有没有办法做到这一点?

提前致谢!

您基本上有2个选择:

客户端渲染:

如果可以使用javascript将服务器上需要的数据插入到页面中而没有太多麻烦,则应使用@ResponseBody从Controller方法将其作为JSON返回。 转换为JSON可以由Jackson自动完成。

然后,您可以使用现有的Javascript模板引擎库在客户端浏览器上将数据呈现为html,然后将其插入页面中,或者手动将其插入(例如,使用jQuery)。


服务器端渲染:

如果要用服务器端的数据渲染页面的一部分,然后将页面的现成部分发送回客户端,则需要一个模板引擎,该引擎可让您随时随地渲染模板(在在这种情况下,您的控制器方法)。 然后,您可以使用@ResponseBody将html字符串再次作为JSON发送回,并将其插入页面。

我不认为JSP / JSTL可以做到这一点(或者这是非常困难的/ hacky)。 我建议改用FreeMarker

您仍然可以在“完整”页面上使用JSP / JSTL,而在零件上使用FreeMarker。 FreeMarker与JSP / JSTL并没有太大区别,因此您可以翻译页面的一部分而不会出现太多问题。

除了我的评论外,我强烈建议使用@ResponseBody注释,而不要使用ModelAndView

确保在类路径上具有jackson-databind ,这将导致Spring自动将POJO序列化为JSON,可以将其直接用作ajax回调函数中的Javascript对象

在此处查看快速教程: http : //www.journaldev.com/2552/spring-restful-web-service-example-with-json-jackson-and-client-program

这种方法使Application Server与您的视图脱钩,从而使您不必依赖JSTL模板,从而可以选择直观的前端工作流程(签出AngularJS)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM