GWT,Struts2,JSF - 管理CSS - 仅在必要时提供

时间:2011-02-25 13:45:54

标签: css jsf gwt

我想知道,如果页面需要它,通过使用GWT,JSF的Struts2,它是否可能为客户端提供资源(例如.css文件) 就在那时候。

我并不是说在那一刻加载的页面上包含CSS,但是如果存在一种自动管理这个过程的机制。

2 个答案:

答案 0 :(得分:3)

在JSF2中,可以在模板或复合组件中的任何位置使用<h:outputStylesheet><h:outputScipt>。 JSF会将其放在生成的HTML <head>中。

E.g。

<ui:composition
    xmlns:h="http://java.sun.com/jsf/core"
    xmlns:ui="http://java.sun.com/jsf/facelets"
>
    <h:outputStylesheet library="css" name="specific.css" />
    <h:outputScript library="js" name="specific.js" />
    ...
</ui:composition>

与webcontent的/resources文件夹中的那些文件结合使用。

  • /resources/css/specific.css
  • /resources/js/specific.js

此外,在JSF2 UIComponent中,您可以使用@ResourceDependency@ResourceDependencies注释强制加载特定资源。

@ResourceDependency(library="css", name="specific.css")
public class CustomComponentWithCSS extends UIComponentBase {
    // ...
}

@ResourceDependencies({
    @ResourceDependency(library="css", name="specific.css"),
    @ResourceDependency(library="js", name="specific.js")
})
public class CustomComponentWithCSSandJS extends UIComponentBase {
    // ...
}

因此,只要在视图代码中使用<custom:componentWithCSS>,JSF2就会在生成的HTML <head>中包含带注释的资源。

答案 1 :(得分:1)

BalusC在答案中似乎已经解决了您无法自动包含资源的问题。我同意。考虑到这一点,我可以想象一种方法来做到这一点,但它会如此可怕地使得结果页面变得复杂和膨胀,并且需要大量的开销ajax以使其不合理。

然后会有配置的问题来解释当页面x要求css类“热”它需要“热”来自“main.css”而不是“company.css”换句话说...金额配置可能等于自己管理它的工作量。

现在,如果您使用Struts2并且像基于组合的策略一样,那么Tiles2就是直接的方式。

基本上你制作模板然后有一个单独的定义文件,定义说明要移动到模板中的资源。因此,您可以移动某些css文件,脚本文件,jsps,甚至组成多个模板。然后,您为后续定义继承该定义,并且能够覆盖在需要时更改和扩展定义的部分(类似于OOP继承所获得的)。名称图块来自这样的想法,即您的页面被认为是一些瓷砖,它们被定位为生成页面,然后通过继承,您可以说特定的页面集将基于某个布局。当你使用磁贴继承时,你可以感觉到你正在进行神奇的资源管理......它使事情变得更容易,但它是直接的组合。

Tiles天然适合于构图,但它也支持装饰。很多人都对sitemesh发誓,因此更喜欢装饰方法。你需要研究这两种布局范例,看看对你来说最有意义的是什么。