我是JSF的新手,我正在努力学习它,因为我看到了它的好处。我有一个网站建立在HTML,现在我想创建一些部分的模板,如<head>
节,侧边栏,顶部菜单,页脚等。我了解到在JSF中这些将被称为"组件"。
应该是这样的,例如:
<html>
<h:head>
<title>Example</title>
<ui:include src="/resources/component/head.xhtml"></ui:include>
</h:head>
<h:body>
//....
<ui:include src="/resources/component/footer.xhtml"></ui:include>
</h:body>
</html>
我已经尝试过做类似上面的事情,但我的样式从。css不正确地适用于我的div。javascript文件也是如此。
我想把所有东西都传递给JSF。我不知道这样做是否值得。你们怎么看?
在JSF中创建模板和组件的最佳方式是什么?当我尝试导入这些文件时,为什么我的样式和javascript不能正常工作?我想做的是最好的方法吗?
最诚挚的问候,瓦尔特•恩里克•。
在JSF中,既有模板也有组件。组件不是模板的别称。
您所展示的示例不太可能是组件的候选,但实际上是由(Facelets)模板完成的:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets">
<h:head>
<title>Example</title>
<ui:include src="/resources/component/head.xhtml"/>
</h:head>
<h:body>
<ui:insert name="content"/>
<ui:include src="/resources/component/footer.xhtml"/>
</h:body>
</html>
现在单独的页面可以使用这个模板,然后称为template clients
:
<?xml version="1.0" encoding="UTF-8"?>
<ui:composition
xmlns:ui="http://java.sun.com/jsf/facelets"
template="/templates/master.xhtml">
<ui:define name="content">
Some content for this page.
</ui:define>
</ui:composition>
请注意模板中一个名为content
的节的定义,模板客户端为其提供实际内容。
Components
可以通过Java或通过称为composite-components
的特殊Facelets页面创建。组合组件基本上将许多现有组件和标记组合在一起,形成可以轻松重用的新组件。例如,一个非常简单的没有任何参数的复合组件:
<?xml version="1.0" encoding="UTF-8"?>
<ui:composition
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:cc="http://java.sun.com/jsf/composite"
>
<cc:interface/>
<cc:implementation>
<p>
<h:outputText value="&nbsp;" escape="false"/>
</p>
</cc:implementation>
</ui:composition>
如果你把它放在[web content]/resources/foo/emptyLine.xhtml
中,你可以在你的模板中使用它作为<foo:emptyLine/>
。例如
<?xml version="1.0" encoding="UTF-8"?>
<ui:composition
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:m4n="http://java.sun.com/jsf/composite/foo"
template="/templates/master.xhtml">
<ui:define name="content">
Some content for this page.
<foo:emptyLine/>
</ui:define>
</ui:composition>
有时includes
和composite components
以及第三个变体facelets tags
会感觉彼此有点相似。一般来说,你会将包含用于那些基本上非常特定于单个页面的东西,而组件用于那些你在许多地方重用的东西。composite components
和facelets tags
之间的区别更微妙,但在许多情况下,composite components
可以被认为是两者的更现代的变体。