瓷砖可以有动作类吗?

3
在Stuts2中,我使用Tiles插件为网站创建布局(菜单、页脚、页眉等),以便在每个页面上保持一致性。现在,每个瓷砖都只是一个静态的HTML内容。是否可以通过调用每次呈现页脚时的Footer操作类来使Tile变得更加动态?例如:从数据库获取页脚内容。如果我要在应用程序的每个页面操作类中执行此操作,那么这会导致非常难以使用的代码...因此,也许从Tile的角度来看,这是可能的吗?

1
你试过了吗?作为最后的手段,你总是可以使用<s:action>标签。 - Dave Newton
<s:action> 标签看起来像是我可以使用的东西。如果您发布一个答案,我很乐意接受它。 - Eleeist
似乎是1秒解决方案,下次需要Ajax。 - Roman C
但是如果我需要在页面上使用10个不同的“动态模块”,在页面加载时进行10个Ajax请求似乎并不合适... - Eleeist
我不明白你在说什么,能否提供一个SSCCE - Roman C
发送Ajax请求以获取页眉,发送Ajax请求以获取页脚,发送Ajax请求以获取菜单...总共会进行很多同时的Ajax请求,不认为这是加载页面最有效的方式。 - Eleeist
2个回答

2
尝试以下代码:
$('#footer').load('your/action/with/namespace');

我假设你的 `footer` 元素是带有 `id` 为 `footer` 的,每当你打开一个页面时,你的 footer 动作类将被调用并且数据可以动态获取。

是的,这也是我考虑过的,而且肯定是一个有效的选择,不过...有没有任何非JavaScript的解决方案? - Eleeist

2

如果您使用的是低于2.2.2版本的Tiles,那么只有一种方法可以实现您的要求,那就是通过“preparer”来实现。

然而,这并不是与Struts2的集成,而是意味着预处理器本身将访问服务层以获取视图所需的内容,并且所有这些内容都需要通过Tiles属性进行设置。

在Tiles 2.2.2及更高版本中:

您可以在Tiles属性中使用OGNL表达式,这可以允许访问一些Struts2交互以及静态方法访问。使用静态方法访问,您可以调用返回字符串的方法。创建这样的字符串与编写脚本差不多。

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


我实际上不建议使用以上任何一种方法,目前Tiles 3被推荐,但不应作为编写脚本等不良做法的借口。最好使用David提到的s:action标记或Jaiwo99提到的Ajax方法。原因是这两种方法都符合Struts2,而我提出的方法则不寻常且更难维护。个人偏向于使用Ajax方法。

Struts2与struts2-json-plugin一起使用可以轻松创建JSON服务。Tiles是减少样板代码的好系统。如果大量使用Ajax,则两者确实可以相辅相成。您可以制作许多可重用的Ajax组件,但一定要不要硬编码操作的URL。始终使用s:url标记并将其分配给JS变量。


我会接受这个答案,因为你很好地解释了每种方法的优缺点。那解释了很多事情,非常有帮助。 - Eleeist

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接