选择 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
仍然会运行。
如果这不是可取的,也许您可以通过在构造函数中设置一些标志来改进此模式,以便超类知道应该(不)运行哪个小部件丰富方法。