3

在 Stuts2 中,我使用 Tiles 插件为网站(菜单、页脚、页眉等)创建在每个页面上都一致的布局。

现在每个图块只是一个静态 HTML 内容。

是否可以通过例如使 Tile 更具动态性。Footer每次要渲染页脚时调用一个动作类?例如:从数据库中获取页脚内容。

如果我要在我的应用程序的每个页面的操作类中执行此操作,这将产生一个非常不可用的代码......

所以也许从 Tile 的角度来看是可能的?

4

2 回答 2

2

试试下面的代码:

$('#footer').load('your/action/with/namespace');

我假设您footer使用 id footer,每次打开页面时,都会调用您的页脚操作类,并且可以动态获取数据。

于 2013-01-12T11:02:44.903 回答
2

对于低于 2.2.2 的磁贴版本,只有一种方法可以满足您的要求,那就是使用 "preparer"

然而,这不是与 struts2 的集成,而是意味着它自己的准备者将访问服务层以获取视图所需的内容,并且所有这些内容都需要通过图块属性进行设置。

使用 2.2.2 及更高版本的磁贴:您可以在磁贴属性中使用 OGNL 表达式,这可以允许访问某些 struts2 交互以及静态方法访问。使用静态方法访问,您可以调用一个方法来返回您想要的字符串。创建这样的字符串与编写脚本相当。

要升级,您需要手动覆盖一些 jar 以获取 tile 2.2.2,或者要获取版本 3,您需要实现自己的结果类型:如何将 Struts 2 与 Tiles 3 集成


我目前实际上不推荐上述任何一种方法,推荐使用tile 3,但不能作为做像编写scriptlet 这样糟糕的事情的借口。正如 David 所提到的那样,在 tile 中使用 s:action 标签可能会更好,或者使用 Jaiwo99 提到的 Ajax 方法可能会更好。原因是这两种方法都与 struts2 保持一致,而我介绍的方法不寻常且更难维护。就我个人而言,我倾向于使用 ajax 方法。

Struts2 和 struts2-json-plugin 使得创建 json 服务变得非常简单。Tiles 是一个很好的减少样板的系统。如果 ajax 被大量使用,两者真的可以相互补充。您可以制作很多可重用的 ajax 组件,只要确保不要对操作的 url 进行硬编码。始终使用 s:url 标记并将其分配给 JS 变量。

于 2013-01-12T21:03:18.977 回答