OFBIZ研究心得之六

时间:2022-04-01 16:37:14

(1)     ofbizView层技术

Apache OFBiz中的Widget和Decorator是ofbizView层的技术,是Apache 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="hello">

       <section>

            <widgets>

                <platform-specific><html><html-template location="component://hello/webapp/hello/includes/header.ftl"/></html></platform-specific>

                <platform-specific><html><html-template location="component://hello/webapp/hello/hello.ftl"/></html></platform-specific>

                <platform-specific><html><html-template location="component://hello/webapp/hello/includes/footer.ftl"/></html></platform-specific>

            </widgets>

       </section>

</screen>

 

代码中可以看到news页面由header.ftl,main.ftl,footer.ftl这三部分组成。这三部分的路径都在代码中明确给出,这样的话当用户请求页面hello时,ofbiz就会根据代码中给出的路径找到页面的不同部分,将它们组合起来再返回一张完整的页面的用户。

当View比较复杂,页面太多时,这样在XML里定义每一张页面时,XML的代码量也是非常大的,而且不利于维护。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>

模板页面和普通页面是一样的XML元素,但在其中有一句话不同:<decorator-section-include name="body"/>,该句话所在的位置就是使用了该模板的页面需要添加自己内容的位置,在示例代码中,模板定义了HTML头和脚,使用该模板需要添加的部分就是主体部分。模板中可以添加内容的位置用<decorator-section-include name="body"/>标示,应该可以有多个位置可以被添加,不同的位置用name参数区分。

(2)     数据库访问机制

Apache OFBiz对数据库的访问主要是通过GenericDelegator进行控制,包括常用的数据库操作方法,如find、remove、store、create等。虽然由于知识及时间限制,本次二次开发并没有研究所有的接口,但Apache OFBiz的这种数据库访问机制非常值得学习。