ofbiz中的Widget小窗口和Decorator装修器是ofbizView层的技术,是ofbiz的一大特色。使用widget我们可以将很多零散的页面部分拼合成一张页面。这样的话每张页面都有的公共部分我们就只用创建一次,创建新页面时我们只用创建不同的部分即刻可。
Widget是用xml文件表示的,存放的位置是app\widget\XxxxScreen.xml,零散的页面碎片通常存放在app\webapp\app\下和app\webapp\app\includes\下,app\webapp\app\存放的是不同的页面部分,app\webapp\app\includes\下存放的是相同的页面部分。
Widget示例代码:
<screen name="news">
<section>
<widgets>
<platform-specific><html><html-template location="component://hello2/webapp/hello2/includes/header.ftl"/></html></platform-specific>
<platform-specific><html><html-template location="component://hello2/webapp/hello2/news.ftl"/></html></platform-specific>
<platform-specific><html><html-template location="component://hello2/webapp/hello2/includes/footer.ftl"/></html></platform-specific>
</widgets>
</section>
</screen>
代码中我们可以看到news页面由三部分组成:header.ftl,main.ftl,footer.ftl。这三部分的路径都在代码中明确给出,这样的话当用户请求页面news时,ofbiz就会根据代码中给出的路径找到页面的不同部分,将它们组合起来再返回一张完整的页面的用户。
然而,当View比较复杂,页面太多时,这样在XML里定义每一张页面时,XML的代码量也是非常大的,而且不利于维护,别急,Decorator装修器可以帮我们解决这个问题!Decorator是一个页面模板,该模板也是一个screen元素,模板名通常叫CommonDecorator,和widget定义在相同的XML文件中。当模板定义后每一个页面的定义就不用像上面这样将所有的部分都列出来了,可以只用列出和其它页面不同的部分。
示例代码:
<screen name="CommonDecorator">
<section>
<widgets>
<platform-specific><html><html-template location="component://hello2/webapp/hello2/includes/header.ftl"/></html></platform-specific>
<decorator-section-include name="body"/>
<platform-specific><html><html-template location="component://hello2/webapp/hello2/includes/footer.ftl"/></html></platform-specific>
</widgets>
</section>
</screen>
<screen name="news">
<section>
<widgets>
<decorator-screen name="CommonDecorator">
<decorator-section name="body">
<platform-specific><html><html-template location="component://hello2/webapp/hello2/news.ftl"/></html></platform-specific>
</decorator-section>
</decorator-screen>
</widgets>
</section>
</screen>
代码中,页面news的代码就要比一开始少了很多,原因就是使用了模板CommonDecorator。模板页面和普通页面是一样的XML元素,但在其中有一句话不同:<decorator-section-include name="body"/>,该句话所在的位置就是使用了该模板的页面需要添加自己内容的位置,在示例代码中,模板定义了HTML头和脚,使用该模板需要添加的部分就是主体部分。模板中可以添加内容的位置用<decorator-section-include name="body"/>标示,应该可以有多个位置可以被添加,不同的位置用name参数区分。
注意使用了模板的news页面的格式,<widgets>标签内部套一个<decorator-screen name="CommonDecorator">标签,说明要使用的模板是CommonDecorator,然后在其内再套一个 <decorator-section name="body">标签,说明要在模板的"body位置"添加内容。在该标签里的 <platform-specific><html><html-template location="component://hello2/webapp/hello2/news.ftl"/></html></platform-specific>就是news页面与其他页面不同的内容。
相关推荐
1、Decorator 自定义边框 2、Adorner调整控件大小和位置
20-装饰器使用_Decorator
奇幻RPG(物品锻造 与 Decorator模式)本文中,我们通过一个常见的给武器(对象)添加宝石(额外的状态和行为)的例子,讨论了Decorator设计模式的实现过程。
angularjs-logDecorator, 使用AngularJS的decorator来增强和增强 $log AngularJS LogXLogX为AngularJS的$log 实用程序提供扩展版本,以提供类似于以下内容的日志输出: 最初发布为一组必须手动克隆并集成到每个项目...
sequelize-typescript, decorator和sequelize的一些其他特性( + v4 ) sequelize装饰器和 sequelize ( v3,v4,v5 )的一些其他特性。模型定义@Table API@Column API使用情况配置文件模型路径解析模型关联插件On
decorator-wechat,微信现代化(Nevolution decorator).zip
使用装饰器自动生成swagger json文档 安装 npm install koa-swagger-decorator 贡献指南 请参考创建PR或发行前。 介绍 Koa Swagger装饰器 使用装饰器自动生成swagger json文档,添加对swagger定义的支持验证 基于 ...
博文链接:https://your.iteye.com/blog/133420
windows系统下的python超时装饰器,解决pypi中timeout-decorator库在windows系统上不可用的问题。
方便的ES / TypeScript装饰器,用于Nuxt中的类样式Vue组件(基于)以及(基于 )和Vuex(基于) 该库完全依赖于 。 执照 麻省理工学院执照 安装 安装非常容易 npm i -S nuxt-property-decorator 或者 yarn add ...
mybatis3+springmvc4+angularjs+mysql+decorator实例 +代码生成器 学习讨论使用
软件介绍: 这个decorator python是网友分享过来的一个模块文件,既然下载肯定会知道它的用途。
*Decorator 常被翻译成"装饰",我觉得翻译成"油漆工"更形象点,油漆工(decorator)是用来刷油漆的,那么被刷油漆的对象我们称decoratee.这两种实体在Decorator 模式中是必须的。
装饰器(Decorator)模式 详细教程,简明易懂,非常清晰的,附带有代码示例。
装饰器的运用是Python编程中的一项高级技巧,这里我们由浅入深,整理了12步入门Python中的decorator装饰器使用方法,需要的朋友可以参考下
学习java 装饰模式(decorator)非常好的例子
23种设计模式之八(结构型模式)Decorator模式
decorator-4.1.2.tar.gz是支持ipython的依赖包。。。。
一、装饰器decorator ... 比较常用的功能一般使用decorator来实现,例如python自带的staticmethod和classmethod。 装饰器有两种形式: 复制代码 代码如下: @A def foo(): pass 相当于: 复制代码 代码如下
NULL 博文链接:https://xiangtui.iteye.com/blog/1033790