3

我有一个 Java、Spring、Struts 2 和 Hibernate 的网络应用程序,它为多个客户端提供服务。每个客户端都有多个用户。为了为每个客户创造个人感觉,我想为每个客户定制标题。我正在使用 sitemesh 作为装饰器,并且正在寻找提示或示例或可以为我指出正确方向的人,以了解如何在最佳实践中实现这一目标。

你会怎么想?我应该直接在 header.jsp 中对其进行编码吗?提取有关登录用户的信息并从中通过代码创建自定义标头?还是有更聪明的解决方案?

谢谢!

更新:

为了进一步明确我想要的:每个客户端的不同属性文件不是一个选项。我们正在寻找潜在的数百个客户。它需要是数据库驱动的。但这是容易的部分。将信息存储在 db 中并在需要时提取它是没有问题的。

我想弄清楚的是是否有某种标准的方法来做到这一点。在站点网格装饰器之前运行的某种过滤器或操作将为装饰器提供正确的信息?

4

2 回答 2

1

Struts2 为应用程序的全局变量提供应用程序范围。

将所有客户特定的字符串加载到#application 范围内(我会在应用程序启动时使用 spring 来执行此操作)。从那里引用字符串将非常明显:#application.greeting我不喜欢使用拦截器的想法,因为没有什么可以拦截的。我会说你正在做的应用范围是完美的地方。如果它是单个客户端系统,我看不出任何东西会存储在应用程序范围内的原因。

另外:Tiles 使用与站点网格不同的模板范例,它们的用途略有不同。因此,两者可以互补。依赖于 XML 定义的图块可以将其定义存储在数据库中,并且计算密集度肯定较低,但是在不同 UI 组件之间存在相互作用的情况下......或者页面上出现的不同元素需要使用 sitemesh。因此,对于基本模板需求,tile 可以做所有事情,而且很容易理解,但是说你想在页面中间添加一个依赖于 JS 的小部件,它需要添加到标题中,这样做会很棘手Tiles(尽管显而易见的解决方案是将 JS 功能整合到一个 JS 文件中,以供站点特定部分的所有可能用途使用)。

旁白 2:通过使用诸如速度或 freemarker 之类的视图技术与瓦片结合,可以将整个视图层移动到数据库中。我只是想我会提到一些可能非常有益的维护问题。

于 2012-05-08T03:37:05.770 回答
0

Sitemesh 根据请求的 URL 字符串决定使用什么装饰,因此除非您在每个 url 中都有对客户端的引用 - 作为主 url 字符串的一部分或作为已知参数,否则 Sitemesh 开箱即用不会帮忙的。

这为实现您想要的目标留下了一些可能性;

1) 编写一个在 Sitemesh 之前运行的过滤器,例如,将“&clientId="xx" 添加到每个传入请求中。

2) 深入研究 Sitemesh 的源代码并寻找 Sitemesh 最终决定使用哪些装饰器并覆盖它的地方。我从来没有尝试过,所以我不知道这可能有多实用。

3) 使您的 jsp 页面中的样式表定义成为 OGNL 表达式,并在您的所有操作都扩展的基本操作类中提供该信息。通过这种方式,您最终(可能)为每个客户端使用不同的 CSS 文件,并通过 CSS 提供自定义。

希望这会有所帮助。

于 2012-05-09T07:01:15.687 回答