2015-11-19 20 views
2

據我所知,資源庫的合同將創建支持模板,但即使沒有它,模板可以很容易地通過用戶界面來實現的:插入所引用:何時在JSF 2.2中使用資源庫合同?

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

而是創建一個「合同」目錄中, '模板'目錄可以在Web應用程序根目錄下使用。

那麼,什麼是使用合同的好處?

+0

我只是用Google搜索 '資源庫合同',發現幾篇文章/博客/'教程,解釋他們。我通過簡單的「模板化」來了解更難以實現的事情。不知道你是否讀過那些,但請先做。特別是關於動態切換模板的部分。 – Kukeltje

+0

對於桌面和移動應用程序,可能會出現這種情況,可以使用資源契約庫以不同的方式格式化視圖。 – user697911

回答

3

嗯,你知道,無論是流量和資源庫合約均 顯然,大件功能。而一個資源庫合同 真的,如果你要 支持移動和桌面客戶端,因爲你可以切換 來回一組,你只定義模板之間的情況真的很強大。所以 這是一個非常強大的功能。

我也希望,人們看到。但關於它的好處是,這是一個可堆疊的功能。所以這意味着你實際上可以有一個 資源庫合同的佈局,然後是一個資源庫 合同的頂部,以顏色樣式或類似的東西。所以 你可以來回切換之間 - 我只是用一個例子, 明顯 - 藍色和紅色的造型,以及移動與桌面 造型。所以這將是四個排列,你已經 了。

就是這樣跳出我,因爲我的另一件事 - 我敢肯定你 跑進這一點。我有客戶誰基本上有他們出售的產品 ,或者它是一個託管產品或它的前提下 產品。但無論哪種方式,每個客戶都需要不同的外觀和感覺,以及不同的參數集合等等。你可以 做了很多的數據庫,但在某些時候,你要 實際更改模板和資源庫合同 使得這非常容易使用。所以我認爲這也是我最喜歡的 功能之一。

資源庫合同允許你有哪些是在JSF 2.0推出多個資源庫,其中CSS,JS,圖片和複合組件方式支付。

  1. 所有模板文件必須被命名爲同一
  2. 全部<ui:inserts name="must have the same attribute value" />

有幾種方法可以應用它。

-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設置合同精讀每個視圖:通過URL模式自動映射上的觀點合同: 這允許用戶選擇要使用的設計(模板)。

<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; 
    }   
}