0

我正在搜索其他一些与 spring 相关的 ajax 技术。

主要问题是html页面的一部分重复了很多次,并且迫使大部分页面不断呈现,例如一对多的关系部分。每次在新控制器中调用相同的对象是很无聊的。

另外编写自定义嵌套jsp标签只是给我一些html页面视图代码减少但需要很长时间开发,在控制器层我必须再次调用对象并重用它们,这会产生大量不必要的负载,也迫使重构涉及的控制器。所以我需要一些东西,比如将控制器绑定到页面的一部分。可以在任何其他 jsp 页面中重用。我知道我可以在 ajax 中做到这一点,但它给了我许多复杂而庞大的 js 代码。所以问题是:

spring mvc + iframes 有效率吗?spring 可以使用 iframe 管理安全会话吗?它可以替代portlet吗?

4

1 回答 1

1

选择 ajax 与服务器端操作的考虑应考虑到用户体验、安全性等——而不仅仅是基于您的开发时间。有些操作更适合在服务器端完成,而另一些则在客户端/ajax 上完成。请记住,在开发 ajax 时,将 Spring 与 Jackson JSON 处理器结合起来有很大帮助,POJO 可以直接映射并通过处理程序以最少的代码返回。

我不会使用 iframe,因为难以将客户端项目与页面的其他组件集成

关于在不同的控制器上有重复的代码,对我有用的一种方法是一种常见的超类控制器方法:

创建一个包含共享可重用代码的超类控制器(例如:丰富小部件模型)

public class CommonController {
  @ModelAttribute
  public void enrichWidgetA(Model model) {
    model.addAttribute("widgetAMsg", "hello world");
  }
}

在其他控制器类上扩展 CommonController

@Controller
public class HomeController extends CommonController {
  @RequestMapping("/home")
  public String home() {
    // do your stuff here
    return "home";
  }
}

在您的 JSP 视图中,您可以利用 JSP 标记使其保持干燥(不要重复自己)。enrichWidgetA将在home()handler 方法之前调用,您可以对可重用视图组件执行业务操作。

当然,这种方法的缺点是,如果您有多个小部件但只有一些(不是全部)出现在页面上,那么CommonController装饰上的每个方法@ModelAttribute仍然会运行。

如果这不是可取的,也许您可​​以通过在构造函数中设置一些标志来改进此模式,以便超类知道应该(不)运行哪个小部件丰富方法。

于 2013-09-26T23:13:25.330 回答