装饰多客户端webapp

时间:2012-05-07 09:47:41

标签: java struts2 sitemesh

我有一个Java,Spring,Struts 2和Hibernate的Web应用程序,可以为多个客户端提供服务。每个客户端都有多个用户。为了为每个客户创建个人感觉,我想为每个客户自定义标题。 我正在使用sitemesh作为装饰,我正在寻找提示或示例或者能够指出我如何在最佳实践中实现这一目标的正确方向的人。

你会怎么想?我应该直接在header.jsp中编码吗?提取有关已登录用户的信息并从中创建自定义标头的代码?或者那里有更聪明的解决方案吗?

谢谢!

更新

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

我想弄清楚的是,是否有某种标准方法可以做到这一点。在sitemesh装饰器之前运行的某种过滤器或Action将为装饰器提供正确的信息吗?

2 个答案:

答案 0 :(得分:1)

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

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

除了:Tiles使用与网站网格不同的模板范例,它们的目的略有不同。因此,这两者可以是互补的。依赖于XML定义的Tile可以将它的定义存储在DB中,并且肯定不那么计算密集,但是在不同UI组件之间存在相互作用的情况下......或者页面上出现的不同元素需要使用sitemesh。所以对于基本的模板需求,tile完成所有操作并且很容易理解,但是你想要在页面中间添加一个特定的小部件,它依赖于需要添加到头部的JS,这样做很棘手。 Tiles(虽然显而易见的解决方案是将JS功能转换为一个JS文件,以便在站点的特定部分中使用所有可能的用途)。

Asside 2 :通过将视图技术(如速度或自由标记)与切片结合使用,可以将整个视图层移动到数据库中。我想我会提到一些可能非常有益的维护问题。

答案 1 :(得分:0)

Sitemesh决定根据请求的URL字符串使用哪种装饰,因此除非您在每个URL中都有对客户端的引用 - 作为主url字符串的一部分或作为已知参数,然后Sitemesh out of这个盒子不会有帮助。

这留下了一些实现你想要的东西的可能性;

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

2)深入了解Sitemesh&的源代码。寻找Sitemesh最终决定使用哪些装饰器并覆盖它的决定。我从来没有试过这个,所以我不知道这有多可行。

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

希望这会有所帮助。