ofbiz学习——对模板使用装饰器screen widget

OFBiz对视图模板使用装饰器screen widget。这里单词装饰器来它基于的自设计模式——装饰器模式,这里装饰器在要包装的对象周围包装它自己。这种设计模式本身很适合我们模板的需要,因为一个装饰器将作为一个带有插槽的模板,在其中我们能插入(包含,在screen widget术语中)内容。也就是说,装饰器用内容块包围来包装自己。


1.创建XHTML装饰器screen

插入一个新的screen widget 名为xhtml-decoratorscreen widget到文件 LearningScreens.xml中:

---------------------------------------------------

<screen name="xhtml-decorator">

    <section>

      <widgets>

        <include-screen name="header"/>

        <decorator-section-include name="body"/>

        <include-screen name="footer"/>

      </widgets>

    </section>

</screen>

---------------------------------------------------

注意这跟CompoundedScreen很像,除了所有的内容被 <decorator-section-include>元素替换掉了。 <decorator-section-include>就像一个命名的内容插槽。该元素告诉装饰器在headerfooter之间插入名为body的内容片断。

实际上内容片断可被命名意味着:在一个包含不同内容片断的装饰器中,我们能有多个插槽。简而言之,一个装饰器窗口可指定命名的内容插槽,相同命名的内容片断可插入包含进其中。现在,在下面的例子中试试一个单一插槽的装饰器吧。


2.使用XHTML装饰器screen

在文件LearningScreens.xml中,编辑screen widget CompoundedScreen来使用screen widget xhtml-decorator

---------------------------------------------------

<screen name="CompoundedScreen">

    <section>

         <widgets>

             <decorator-screen name="xhtml-decorator">

                 <decorator-section name="body">

                      <include-screen name="SimplestScreen" />

                      <include-screen name="AnotherSimpleScreen" />

                 </decorator-section>

             </decorator-screen>

         </widgets>

    </section>

</screen>

---------------------------------------------------

 <decorator-screen>元素指出:我们想要应用xhtml-decorator装饰器screen到包含在<decorator-screen>元素中的内容。

为了让 <decorator-screen>元素拥有任何效果,需要用 <decorator-section> 元素指定命名的内容片断。尽管上面例子中仅展示一个,但可有多个命名的内容片断。命名的内容片断取代装饰器中命名的内容插槽。

上面例子中的命名内容片断body是一个两个简单screens的复合体。这两个简单screens将插入到装饰器的命名内容插槽body中。

3.查看结果

发送OFBiz http请求CompoundedScreenweb应用learning http://localhost:8080/learning/control/CompoundedScreen。查看页面源代码来确认和我们在叫做候选模板的部分中看到的相同的格式良好的XHTML文档。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<!-- Begin Screen component://learning/widget/learning/LearningScreens.xml#CompoundedScreen -->

<!-- Begin Screen component://learning/widget/learning/LearningScreens.xml#xhtml-decorator -->

<!-- Begin Screen component://learning/widget/learning/LearningScreens.xml#header -->

<!-- Begin Template component://learning/webapp/learning/includes/header.ftl -->

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 

          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html>

          <head>

                   <title>OFBiz XHTML Document</title>

          </head>

          <body><!-- End Template component://learning/webapp/learning/includes/header.ftl -->

<!-- End Screen component://learning/widget/learning/LearningScreens.xml#header -->

<!-- Begin Screen component://learning/widget/learning/LearningScreens.xml#SimplestScreen -->

Simplest Screen possible in OFBiz!

<!-- End Screen component://learning/widget/learning/LearningScreens.xml#SimplestScreen -->

<!-- Begin Screen component://learning/widget/learning/LearningScreens.xml#AnotherSimpleScreen -->

Just Another Simple Screen.

<!-- End Screen component://learning/widget/learning/LearningScreens.xml#AnotherSimpleScreen -->

<!-- Begin Screen component://learning/widget/learning/LearningScreens.xml#footer -->

<!-- Begin Template component://learning/webapp/learning/includes/footer.ftl -->

          </body>

</html><!-- End Template component://learning/webapp/learning/includes/footer.ftl -->

<!-- End Screen component://learning/widget/learning/LearningScreens.xml#footer -->

<!-- End Screen component://learning/widget/learning/LearningScreens.xml#xhtml-decorator -->

<!-- End Screen component://learning/widget/learning/LearningScreens.xml#CompoundedScreen -->

页面源码显示了我们第一个格式良好版本的CompoundedScreen中相同内容。我们使用了一个单一装饰器(xhtml-decorator)来取代两个<include-screen>元素,它们负责创建我们的格式良好的XHTML文档中的头部和底部。






  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值