Moqui學習Day2

用戶 本地化  消息和日誌門面html

用戶門面用於管理當前用戶和訪問,登錄,受權及登出的信息。用戶信息包括區域設置,時區以及幣種/ec.user.nowTimestamp設置日期。
消息門面用於追蹤用戶的消息以及錯誤信息。錯誤消息列表ec.message.errors一樣用於肯定在一個服務調用或其餘動做中是否存在錯誤。
日誌門面用於記錄日誌。org.slf4j.Logger.
 
擴展和附加組件
組件目錄結構
  data – 包含實體 XML數據文件, 其帶有 根元素 entity-facade-xml,按照和 命令行指定的類型匹 配的 type 屬性進行加載 (使用 -loadloadload 的可執行 WAR文件)若是沒有指定 類型 ,能夠爲任何類型
 entity– 這個目錄下存放  的是全部 將會被加載 的實體定義和 實體 ECA XML文件 ;實體 ECA文 件必須放在這個目錄中並有件必須放在這個目錄中並有 ".eecas.xml"的雙重擴展名
 lib – 當 web 應用被部署的時候, 這個目錄下的 JAR 文件將會被添加到 classpath中
 screen  – 約定 這個目錄下的 界面會 被明確的引用( 一般過 "component://*" URL)
 script – 約定 這個目錄下的 腳本 會被明確的引用( 一般過 "component://*" URL);Groovy,XML動做以及其餘腳本都應位於這個目錄下
 service  – 服務 將會按照服務 定義 XML文件中定義的路徑進行加載, 同時不但位於組件 同時不但位於組件 同時不但位於組件 同時不但位於組件的服務 目錄 之下仍是 位於 "classpath://service/"之下的路徑都會被找到; 服務 ECA文件必須放在這個目錄中並 有".secas.xml"的雙重擴展名  ;郵件 ECA文件必須放在這個目錄中並有 ".emecas.xml"的擴展名 
 
組件安裝
加載組件
1.將組件目錄放在runtime/component目錄裏
2.在Moqui XML配置文件中添加一個component-list.component元素
 
裝載界面
每一個Moqui框架中的web應用(包括webroot)都必須有一個根界面,其指定在moqui-conf.webapp-list.webapp.root-screen-location屬性中/默認根界面被調用時,將會加載位於runtime/compoment/webroot/screen/webroot.xml中的webroot應用。
 
對於源自於你組件中位於webroot界面下,界面路徑所制定的可用界面來講,你須要令你組件中的每一個頂層界面成爲webroot界面祖先的子界面。有兩種方式去實現。
1.添加一個screen.subscreens.subscreen-item元素到父界面
查看裝載了example和工具應用界面的apps界面(runtime/component/webroot/screen/WebRoot/apps.xml)
2.添加一條SubscreenItem實體的記錄,在screenLocation字段中指定自界面,裝載點subscreenName字段中等同於subscreens-item.name屬性,同時在userGroup字段中若是其值爲ALL_USERS則表示適用於全部的用戶,若是爲一個實際的userGroupId則表示僅適用於這個用戶組。
 
 
Moqui XML配置文件的設置
 
 
建立本身的組件
 
Moqui依照約定/配置優於編碼的原則進行組件開發
建立目錄
建立  runtime/component/tutorial/screen/tutorial.xml
以自界面的方式掛載
將該頁面掛載到根界面下
定義根界面的webroot組件runtime/component/webroot/screen/webroot.xml
方式一在apps界面作修改,加入:
<subscreens-item name="Toturial" location="component://tutorial/screen/tutorial.xml"

                         menu-title="Toturial" menu-index="1"/>

  

方式二:
<entity-facade-xml>

<SubscreensItem screenLocation="component://webroot/screen/webroot/app.xml"

subscreenName="tutorial" userGroupId="ALL_USERS"

                subscreenLocation="component://tutorial/screen/tutorial.xml"

                menuTitle="Dutorial" menuIndex="2" menuInclude="Y"

/>

</entity-facade-xml>

  

 
 
子界面嵌入:
<screen require-authentication="false">

<widgets>

 

    <label type="hi" text="hello world"/>

    <render-mode>

        <text type="html" location="component://tutorial/screen/hello.html">

        </text>

    </render-mode>

</widgets>

</screen>

  

其中的render-mode是什麼?在render-mode下,你能夠爲不一樣的渲染模式定義各類子元素,甚至是各類文本模式,如,html   xml   xsl-fo csv等。
 
 
第二步     實體
實體是一個基本的扁平列表的數據結構,而且一般爲數據庫中的一張表。一條實體值等價於數據庫表的一行記錄。Moqui框架沒有使用對象關係映射方式,因此咱們要作的就是定義一個實體,而後經過實體門面模式去寫代碼操做使用實體。
建立實體:
咱們建立一個包含tutorialId和description兩個字段的實體XML文件,並命名爲Tutorial位於runtime/component/tutorial/entity/TutorialEntities.xml 
<entities>

    <entity entity-name="Tutorial" package-name="tutorial">

        <field name="tutorialId" type="id" is-pk="true"/>

        <field name="description" type="text-long"/>

    </entity>

</entities>

  

添加數據:
實體門面模式具備從XML文件中讀取或寫入數據的功能,這些XML文件中的節點元素須要和實體名對應,一樣的屬性名和字段名各需對應。
runtime/component/tutorial/data/TutorialData.xml 
<entity-facade-xml type="seed">

    <Tutorial tutorialId="TestOne" description="Test one description"/>

    <Tutorial tutorialId="TestTwo" description="Test two description"/>

</entity-facade-xml>

  

 
 
自動查詢表單:
runtime/component/tutorial/screen/tutorial/FindTutorial.xml 
 
<screen require-authentication="anonymous-view">

    <transition name="findTutorial">

        <default-response url="."/>

    </transition>

    <action>

        <entity-find entity-name="Tutorial" list="tutorialList">

            <search-form-inputs/>

        </entity-find>

    </action>

    <widgets>

        <form-list name="ListTutorials" list="tutorialList"

        transition="findTutorial"

        >

            <auto-fields-entity entity-name="Tutorial" field-type="find-display"/>

        </form-list>

    </widgets>

</screen>

  

 
 
關鍵部分:
轉換transition
轉換/跳轉指的是界面之間的連接。相似於一個順序圖易於,咱們把每一個界面當成一個個節點,那麼界面中定義的轉換/跳轉就是「線」通常,從一個節點指向另一個節點界面,而且同時有些跳轉還包含動做或者服務。
    單個轉換能夠按照條件或者不一樣的錯誤結果返回各類響應頁面,一切都取決於你的界面設計需求。
     個別轉換會指向當前頁面。(頁面刷新)
查詢實體動做  actions.entity-find
界面渲染時只有一個界面動做:查詢實體(entity-find)
一般使用entity-find元素(或者調用java api使用EntityFind對象)時,你須要指定過濾條件,排序字段或者其餘查詢相關的信息去運行。
在上個例子中,咱們使用了XML表單內的標準參數去進行實體查詢,因此我麼可使用search-form-inputs子元素去自動生成處理字段。
若是想知道參數會長啥樣只要查看瀏覽器中的html代碼便可。這些都是基於XML表單定義自動生成的。
widgets.form-list
該例子中定義的是個真實的表單,指定的是多條記錄/行數據的「列表」表單(相對於「單個」表單)
這裏的name屬性能夠爲任意值,可是須要XML界面內惟一
這裏的list屬性參照的是動做actions塊中的entity-find返回的結果,transaction屬性參照的是界面定義最上面的transaction元素。
ji既然目標是建立一個基於實體定義的表單,咱們便給auto-fields-entity元素賦值爲咱們的Tutorial實體,設置field-type屬性的值爲find-display選項,表示會建立查詢字段在頭部而且在表格中生存並顯示每條記錄。
指定字段:
若是不想要默認的方式去生成description字段,要在form-list元素內添加一個field元素,而且跟在fields-entity元素以後
 
<form-list name="ListTutorials" list="tutorialList"

        transition="findTutorial">

            <auto-fields-entity entity-name="Tutorial" field-type="find-display"/>

             <field name="description">

             <header-field show-order-by="true">

                 <text-find find-options="true"/>

             </header-field>

            <default-field>

        <display/>

 

               </default-field>

            </field>

        </form-list>
相關文章
相關標籤/搜索