【问题标题】:Can tiles have action classes?瓷砖可以有动作类吗?
【发布时间】:2013-01-12 07:49:26
【问题描述】:

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

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

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

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

那么从 Tile 的角度来看,这可能吗?

【问题讨论】:

  • 你试过了吗?作为最后的手段,您始终可以使用<s:action> 标签。
  • <s:action> 标签看起来像是我可以使用的东西。如果您发布一个答案,我很乐意接受这个答案。
  • 看来1秒的解决方案,下次你得到你需要Ajax。
  • 但是如果我的页面上需要 10 个不同的“动态模块”,那么在页面加载时执行 10 个 Ajax 请求似乎是不对的......
  • 我不明白你在说什么,你能提供SSCCE吗?

标签: java struts2 tiles struts2-tiles-plugin


【解决方案1】:

There is only one way to do what you ask with a tiles version less than 2.2.2 and that is with a "preparer"

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

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

要升级,您需要手动覆盖一些 jar 以获取 tile 2.2.2,或者要获取版本 3,您需要实现自己的结果类型:How to integrate Struts 2 with 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 变量。

【讨论】:

  • 我会接受这个作为答案,因为您很好地解释了每种方法的优缺点。这解释了很多事情并且非常有帮助。
【解决方案2】:

试试下面的代码:

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

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

【讨论】:

  • 是的,我也是这么想的,这当然是一个有效的选择,但是......有没有非javascript的解决方案?
猜你喜欢
  • 2014-01-17
  • 2016-11-19
  • 2019-05-10
  • 1970-01-01
  • 2021-04-01
  • 2018-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多