JSF 2:如何正确构建组件



我是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="&amp;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>

有时includescomposite components以及第三个变体facelets tags会感觉彼此有点相似。一般来说,你会将包含用于那些基本上非常特定于单个页面的东西,而组件用于那些你在许多地方重用的东西。composite componentsfacelets tags之间的区别更微妙,但在许多情况下,composite components可以被认为是两者的更现代的变体。

相关内容

  • 没有找到相关文章

最新更新