我正在寻找与春天相关的其他一些ajax技术。
主要问题是html页面的一部分重复了很多次,并迫使页面的大部分内容不断呈现,例如一对多的关系部件。 每次在新控制器中调用相同的对象都很无聊。
另外编写自定义嵌套jsp标签只是给我一些html页面查看代码减少但需要长时间开发,同样在控制器层我必须再次调用对象并重用它们会造成大量不必要的负载,也强制重构涉及的控制器。 所以我需要一些东西,比如将控制器绑定到页面的一部分。 这可以在任何其他jsp页面中重用。我知道我可以在ajax中执行此操作但它给了我许多复杂且巨大的js代码。所以问题是:
spring mvc + iframe有效吗? Spring可以使用iframe管理安全会话吗? 它可以替代portlet吗?
答案 0 :(得分:1)
选择ajax与服务器端操作的考虑因素应该考虑用户体验,安全性等 - 而不仅仅是基于您的开发时间。某些操作更适合在服务器端完成,而其他操作在客户端/ ajax上。请记住combining Spring with Jackson JSON processor在开发ajax时可以提供很多帮助,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视图中,您可以utilize JSP tag to keep it DRY(不要重复自己)。 enrichWidgetA
将在home()
处理程序方法之前调用,您可以为可重用的视图组件执行业务操作。
当然,这种方法的缺点是如果你有多个小部件,但只有一些(不是全部)出现在页面上,CommonController
装饰有@ModelAttribute
的每个方法仍然会运行。
如果这不可取,也许您可以通过在构造函数中设置一些标志来改进此模式,以便超类知道应该(不)运行哪个小部件丰富方法。