2

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

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

问题是,我怎么能在没有太多代码重复/开销的情况下做到这一点。我想我必须创建几个 WAR 模块(每种风格一个)和几个依赖于不同 WAR 的 EAR。这样做的缺点是必须为每种口味添加另外两个具有所有配置的模块。所有的 JSF 页面都必须被复制,这真的不太好(好吧,通过单独的存档提供 XHTML 并使用Maven 的远程资源插件共享远程资源可能会有所帮助)。

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

在此先感谢,
-马丁

4

1 回答 1

0

首先,你所有的 css 都应该被外部化到文件中。每个主题都有不同的 CSS 页面集。假设您的应用中有 2 个页面,主页和搜索页面,并且您希望有 2 个红色和蓝色主题,那么您应该有 homeRed.css、searchRed.css 和 homeBlue.css 和 searchBlue.css。

现在关于在运行时切换主题,在 JSP 等动态网页中,您可以根据参数值生成网页。假设colorStyle是您的参数名称,那么您可以使用 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 实用程序将所需文件复制到您将创建战争的文件夹中。对于 Maven 配置方法,您可以选择要包含或排除的文件集。参考文献什么是(暂时)从 Maven 构建中排除源的“正确”方法,是否有一种简单的方法可以从 Eclipse 中做到这一点?

于 2013-09-13T06:06:16.340 回答