我有一个基于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 plugin到share remote resources可能会有帮助)。
提前致谢,
- 马丁
答案 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?