何时在JSF 2.2中使用资源库合同?

时间:2015-11-19 22:44:37

标签: templates jsf jsf-2.2

我知道资源库契约是为了支持模板而创建的,但即使没有它,也可以通过ui插入模板来轻松实现:在template.xhtml中插入:

<div id="content">
            <ui:insert name="content" />
</div>

可以在Web应用程序根目录下使用“模板”目录,而不是创建“合同”目录。

那么,使用合同有什么好处?

2 个答案:

答案 0 :(得分:3)

  

嗯,你知道,流程和资源库合同都是   显然,功能强大。资源库合同是   如果你处于你想要的状态,那真的非常强大   支持移动和桌面客户端,因为您可以切换   在您刚定义的一组模板之间来回切换。所以   这是一个非常强大的功能。

     

希望人们看到这一点。但关于它的好处,它是一个   可堆叠的功能。那意味着你实际上可以拥有一个   布局的资源库合同,然后是资源库   最重要的是颜色造型或类似的东西。所以   你可以来回切换 - 我只是用一个例子,   显然 - 蓝色和红色的造型,以及移动与桌面   造型。那么这就是你已经有的四种排列   有。

     

这是跳出来的另一件事,因为我 - 我确定   你也碰到了这个。我的客户基本上都有产品   他们出售,无论是托管产品还是内部产品   产品。但无论哪种方式,每个客户都想要不同的外观和感觉,   和不同的参数集,以及类似的东西。你可以   在数据库中做了很多,但在某些时候,你想要   实际上更改模板,资源库收缩   使它非常容易使用。所以我觉得这是我的最爱之一   功能也是如此。

资源库合同允许您拥有多个资源库,这些资源库是在JSF 2.0中引入的,其中包含css,js,images和复合组件。

  1. 所有模板文件必须命名为相同
  2. 所有<ui:inserts name="must have the same attribute value" />
  3. 有几种方法可以应用它。

    -Web Pages/
    --contracts/
    ---resource-1/
    -----template.xhtml
    -----css/
    -----js/
    -----img/
    ---resource-2/
    -----template.xhtml
    -----css/
    -----js/
    -----img/
    

    #1:通过网址格式自动映射视图合同:

    在faces-config.xml文件中

    <application>
    
       <contract-mapping>
            <url-pattern>*</url-pattern>
            <contracts>resource-1</contracts>
       </contract-mapping>
    
       <contract-mapping>
            <url-pattern>/admin/*</url-pattern>
            <contracts>resource-2</contracts>
       </contract-mapping>
    
    </application>
    

    #2为每个视图设置合约: 这允许用户选择要使用的设计(模板)。

    <html xmlns="http://www.w3.org/1999/xhtml"
          xmlns:h="http://xmlns.jcp.org/jsf/html"
          xmlns:ui="http://java.sun.com/jsf/facelets"
          xmlns:f="http://java.sun.com/jsf/core">
    
        <f:view contracts="#{templateMB.template}">
            <ui:composition template="/template.xhtml">
                <ui:define name="content">
                    <h:form>
                        <h:selectOneMenu valueChangeListener="#{templateMB.tempEvent}"
                                         onchange="submit()">
                            <f:selectItem itemLabel="..." itemValue="..."/>
                            <f:selectItem itemLabel="resource-1" itemValue="resource-1"/>
                            <f:selectItem itemLabel="resource-2" itemValue="resource-2"/>
                        </h:selectOneMenu>
                    </h:form>
                </ui:define>
            </ui:composition>
        </f:view>
    </html>
    

    托管bean的位置为:

    @ManagedBean
    @SessionScoped
    public class TemplateMB {
    
        private String template = "resource-1"; // make default
    
        public TemplateMB() {
        }
    
        public void tempEvent(ValueChangeEvent e){
             template = (String) e.getNewValue();
        }
    
        public String getTemplate() {
            return template;
        }        
    }
    

答案 1 :(得分:0)

要创建多个模板并将其应用于同一应用程序的不同页面,还允许用户选择要应用的模板。

好例子Applying JSF 2.2 Resource Library Contracts