为不同客户设置Web应用程序样式的正确方法

时间:2013-09-11 11:01:59

标签: css maven web-applications war jsf-1.2

我有一个基于JSF 1.2的Java Web应用程序,打包为EAR。它包含几个JAR和一个WAR,它提供web-UI作为前端。 WAR包含JSF页面(XHTML),CSS文件和其他Web资源,如图像。正在使用的构建系统是maven 2(多模块项目)。

现在的目标是提供web-UI的不同“ flavor ”。每个风味可以有不同的样式表和不同的图像,但功能相同。

问题是,如果没有太多的代码重复/开销,我怎么能这样做呢。我想我必须创建几个WAR模块(每个风格一个)和几个依赖于不同WAR的EAR。这样做的缺点是必须为每种风格添加另外两个具有所有配置的模块。所有的JSF页面都必须重复,这真的不太好(好吧,通过单独的存档提供XHTML并使用Maven's remote resources pluginshare remote resources可能会有帮助)。

  • 描述的设置是我问题的最佳解决方案还是有更好的方法?
  • 有没有办法在运行时更改样式?即提供CSS文件和图像作为外部资源?

提前致谢,
- 马丁

1 个答案:

答案 0 :(得分:0)

首先,所有的css都应该外部化为文件。 每个主题都有不同的css页面集。假设你的应用程序,主页和搜索页面有2个页面,你想要有2个主题红色和蓝色,那么你应该有homeRed.css,searchRed.css和homeBlue.css以及searchBlue.css。

现在关于在运行时切换主题,在JSP等动态网页中,您可以根据参数值生成网页。让我们说 colorStyle 是你的param名称,然后就可以像JSP那样使用

    <% if(colorStyle.equals("RED")){ %>
       <link rel="stylesheet" href="path/to/homeRed.css">
    <% } else { %>
        <link rel="stylesheet" href="path/to/homeBlue.css">
    <% } %>

您可以从用户读取 colorStyle 的值,或根据您的要求在您的应用中对其进行硬编码。

请注意,上面提到的是JSP中非常粗暴的做法,现在不推荐这样做,但是当你使用JSF时,必须要以复杂的方式做到这一点。

*编辑更新 * 在这种情况下,你想要做的只有两种方式。源文件的maven配置或stanalone实用程序将所需文件复制到您将创建war的文件夹中。对于maven配置方法,您可以选择要包含或排除的文件集。对于ref What's the "right" way to (temporarily) exclude sources from a maven build, and is there an easy way to do it from Eclipse?