css 文件在 Spring Theme 模块中不起作用。属性文件已正确加载,但 css 无法正常工作

Posted

技术标签:

【中文标题】css 文件在 Spring Theme 模块中不起作用。属性文件已正确加载,但 css 无法正常工作【英文标题】:css file is not working in Spring Theme module. properties files are loaded properly but css are not working 【发布时间】:2013-06-18 16:50:50 【问题描述】:

我配置了我的配置文件,即。使用以下 bean 的主题的 dispatcher-servlet.xml 文件

<bean id="themeSource" class="org.springframework.ui.context.support.ResourceBundleThemeSource">
    <property name="basenamePrefix" value="theme-" />
</bean>

<!-- Theme Change Interceptor and Resolver definition -->
<bean id="themeChangeInterceptor" class="org.springframework.web.servlet.theme.ThemeChangeInterceptor">
    <property name="paramName" value="theme" />
</bean>
<bean id="themeResolver" class="org.springframework.web.servlet.theme.CookieThemeResolver">
    <property name="defaultThemeName" value="default" />
</bean>

我添加了 3 个属性 如源码目录下的theme-black.properties,theme-blue.properties,theme-default.properties。

在每个属性文件中,我添加了如下键值对

style=style/blue.css
style=style/black.css
style=style/default.css

我将 style 文件夹放在 Web-Content 下。 问题是这个 ResourceBundleThemeSource 已成功加载属性文件,但无法加载 css 文件。

在 JSP 文件中我添加了以下代码

<link rel="stylesheet" href="<spring:theme code='style'/>"
type="text/css" />

为了改变

<span style="float: right;"> <a href="?theme=default">
        default</a> &nbsp;| <a href="?theme=blue">blue</a> &nbsp;| <a
    href="?theme=black">black</a>
</span>

如果有任何问题请帮助我........请请>提前致谢

【问题讨论】:

【参考方案1】:

我没有使用 Spring 主题支持的经验,但是我发现您的 URL 中有一个小错误。

首先,您的网址是相对的。您应该始终拥有绝对 URL(以 / 开头)。

其次,在使用任何 URL 时,应使用&lt;c:url&gt;&lt;spring:url&gt;,以便使用正确的上下文前缀:

<spring:url var="cssUrl">
    <jsp:attribute name="value"><spring:theme code="style"/></jsp:attribute>
</spring:url>

【讨论】:

嗨,帕维尔,感谢您的快速回复,但我没有收到您的回复。我相信我的代码中没有使用任何网址。如果你知道可以请你指导我。谢谢.... href="&lt;spring:theme code="style"/&gt;" - 这里您使用的是 CSS 文件的 URL。您至少应该在属性中添加前导斜杠 /。通过 URL 标签处理它是可选的,取决于您的用例。如果 CSS 文件始终是最终 WAR 的一部分,您应该对其进行处理。如果是外部引用或者是对另一个上下文的引用,情况就复杂了一点。【参考方案2】:

不知道你有没有把 bean themeChangeInterceptor ref 放到 bean DefaultAnnotationHandlerMapping 下。如果你已经这样做了,那么请从那里删除它并将其放在&lt;mvc:interceptors&gt;tag 中,如下所示

<mvc:interceptors>
<ref bean="themeChangeInterceptor" />
</mvc:interceptors>

【讨论】:

【参考方案3】:

这就像指定静态内容的位置(在你application-config.xml)以及访问它们的路径一样简单:

&lt;mvc:resources mapping="/resources/**" location="/resources/"/&gt;

接下来您编辑主题属性文件: style=resources/style/blue.css

并将blue.css文件放入:webapp/resources/themes

现在您可以使用以下命令加载css 文件:

    "resources/themes/blue.css" in href

    或者在codespring:theme标签中使用style

这对我有用。

【讨论】:

以上是关于css 文件在 Spring Theme 模块中不起作用。属性文件已正确加载,但 css 无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

自定义字体在 Firefox 中不起作用。

具有相同类名的不同css模块互相覆盖

浏览器无法从 magento 皮肤文件夹加载 theme.css.php 文件

如何在 bootstrap 3 中使用 bootstrap-theme.css?

bootstrap.css 和 bootstrap-theme.css 有啥区别?

HSQL 在 Spring 引导测试中不起作用