我想知道,如果页面需要它,通过使用GWT,JSF的Struts2,它是否可能为客户端提供资源(例如.css
文件) 就在那时候。
我并不是说在那一刻加载的页面上包含CSS,但是如果存在一种自动管理这个过程的机制。
答案 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发誓,因此更喜欢装饰方法。你需要研究这两种布局范例,看看对你来说最有意义的是什么。