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页面与其他页面不同的内容。
分享到:
相关推荐
在Windows Presentation Foundation (WPF) 中,装饰器(Decorator)和adorner是两种非常重要的UI元素,它们可以用于增强和扩展WPF控件的功能和视觉表现。本文将深入探讨这两种技术,并通过具体实例来阐述其在实际开发...
标题中的“扩展你的web app以screen-widget, decorator, and actions”指的是在Web应用程序开发中,通过使用特定的技术或设计模式来增强应用的功能性和用户体验。在这个主题下,我们主要讨论三个核心概念:screen-...
当我们使用@decorator的方式调用装饰器时,实际上是将原函数替换为装饰器返回的新函数。 下面我们将深入探讨装饰器模式的几个关键点: 1. **组件(Component)**:这是被装饰的对象,它定义了一个基本接口,所有...
`decorator-4.1.2.tar.gz` 是一个特定版本(4.1.2)的装饰器库的归档文件,这个库专门用于支持IPython,一个交互式计算环境,广泛应用于数据分析、科学计算和教学。 IPython不仅仅是一个Python shell,它提供了丰富...
总结来说,`decorator-4.1.2`是一个强大且易于使用的Python库,为开发者提供了创建和管理装饰器的强大工具。通过正确地使用它,我们可以提高代码的可读性和可维护性,同时实现灵活的功能扩展。无论是初学者还是经验...
3. **类装饰器**:除了函数装饰器,还可以使用类来实现装饰器,这在处理更复杂的逻辑时很有用。 ### 使用`decorator-3.4.0.tar.gz`模块 这个模块可能提供了更多的装饰器功能,比如支持可配置的装饰器、动态装饰器等...
在没有引入Decorator模式之前,我们可能会使用继承来扩展武器。例如,创建一个基类`Weapon`,包含描述和伤害方法。为了添加宝石,我们需要为每种组合创建一个新的子类,这会导致大量的类,如`BlueSword`、`RedSword`...
装饰者和具体装饰者可以链式使用,形成多个装饰层次,从而实现功能的叠加。 **装饰模式的优点** 1. **可扩展性**:通过添加新的装饰器,可以轻松地为对象添加新功能,而无需修改原有代码。 2. **灵活性**:装饰器...
20-装饰器使用_Decorator
"Decorator-3.4.0" 是一个Python装饰器库的版本,提供了方便和灵活的方式来创建装饰器。这个版本的压缩包文件名为"decorator-3.4.0.tar.gz",它是一个常见的归档格式,用于存储和分发源代码。 在Python中,装饰器...
使用装饰器模式可以避免类库的膨胀和维护的困难,并提供了一个灵活的替代方案来继承子类,以扩展对象的功能。 在设计三明治小店的程序时,我们可以使用装饰器模式来设计库,使得系统更加灵活和可维护。下面是我们的...
这样装饰器可以将自身作为一个组件使用,同时可以通过指针调用实际组件的方法。装饰器类通常会有一个构造函数接受组件对象作为参数。 ```cpp class Decorator : public IComponent { protected: IComponent* ...
angularjs-logDecorator, 使用AngularJS的decorator来增强和增强 $log AngularJS LogXLogX为AngularJS的$log 实用程序提供扩展版本,以提供类似于以下内容的日志输出: 最初发布为一组必须手动克隆并集成到每个项目...
`protocol_implements_decorator`这个名字暗示它可能与Python的协议(Protocol)和装饰器(Decorator)有关。在Python中,协议是一种类似接口的概念,允许类之间实现某种约定,而装饰器是一种高级技巧,用于在不修改...
`vue-property-decorator`是一个库,它是Vue.js和TypeScript的结合,提供了装饰器来帮助我们在TypeScript中更好地声明和管理组件的属性。它使得我们可以利用TypeScript的强类型系统,提高代码的可维护性和可读性。...
使用装饰器自动生成swagger json文档 安装 npm install koa-swagger-decorator 贡献指南 请参考创建PR或发行前。 介绍 Koa Swagger装饰器 使用装饰器自动生成swagger json文档,添加对swagger定义的支持验证 基于 ...
sequelize-typescript, decorator和sequelize的一些其他特性( + v4 ) sequelize装饰器和 sequelize ( v3,v4,v5 )的一些其他特性。模型定义@Table API@Column API使用情况配置文件模型路径解析模型关联插件On
装饰器在Python编程中是一种强大...通过`logit.py`和`decorator.py`中的示例,我们可以学习如何利用装饰器实现日志记录、参数控制等多种实用功能。在实际开发中,合理地运用装饰器能够显著提高代码的可读性和可维护性。
此外,由于装饰器和原始对象实现了相同的接口,因此可以在程序运行时根据需要选择使用原始对象还是装饰后的对象。 装饰模式的使用场景包括: - 当你需要动态地给对象添加行为,而不是通过继承来实现时。 - 当你需要...