OFBiz Tutorial - A Beginners Development Guide
OFBiz教程 – 初学者的开发指南
/display/OFBIZ/OFBiz+Tutorial+‐+A+Beginners+Development+Guide
Translated by hongs,contact:billhongs@gmail
Creating Practice Application ()
Written by: Pranay Pandey with feedback and contributions from Chirag Manocha, Ravindra Mandre, Rob Schapper
Special thanks to Anil Patel and Mridul Pathak for inspiring me to write this tutorial.
这教程面向OFBiz初学者。帮助学习OFBiz应用开发流程基础。创建这个教程背后的目的是让开发者通过最佳实践熟悉代码习惯、控制流或更多。这个练习充当OFBiz的”Helloworld”,和由Kernighan and Richie引入的c 语言编程的第一个Helloworld一样。
重要!
这教程打算使用最新的SVN版本。不再适用于4版本。
与这个应用开发的同时,你可以看OFBiz的视频,它们在
/display/OFBTECH/Framework+Introduction+Videos+and+Diagrams,
Part - 1
注1: 有更多的疑问,你可以参考Example组件。你准能在OFBiz的最新代码的example组件中到你想要的代码。任意时候想参考例子代码,作为这个应用的开发,这些将给你未来的开发中带来帮助。每一个新功能会第一时间加入到example组件中作为参考。
注2:在开始开发这应用前,你一定要阅读下面内容:OFBiz Contributors Best Practices
(/display/OFBADMIN/OFBiz+Contributors+Best+Practices), Coding Conventions (/display/OFBADMIN/Coding+Conventions)and Best Practices Guide
(/display/OFBADMIN/Best+Practices+Guide)。.
注3:不要从其它组件中拷贝文件,因为修订的版本号也会拷贝。如果需要总是创建一个新文件,然后拷贝这文件的内容。也同时可以注意到无用的代码。
注4:搜索任意文档最好的地址是/display/OFBADMIN/OFBiz+Documentation+Index。
注5:从右边开始阅读控制台的日志是一个习惯,可以使得排除问题变得容易些,更好地理解系统。
创建第一个基本应用,命名为"practice"
第1步:在hot-deploy下创建子目录命名为“practice“。这个目录名要匹配我们要创建的组件名。
注:记住所有的定制化开发都仅仅在这完成。
第2步:在hot-deploy/practice路径下创建l文件,填入下面的内容。(作为参考你可以检查这个文件在OFBiz任意其它组件中)
<?xml version="1.0" encoding="UTF-8"?>
<ofbiz-component name="practice"
xmlns:xsi="/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="/dtds/ofbiz-component.xsd"> <resource-loader name="main" type="component"/>
<webapp name="practice"
title="Practice"
server="default-server"
base-permission="OFBTOOLS"
location="webapp/practice"
mount-point="/practice"
app-bar-display="false"/>
</ofbiz-component>
1. 这个l文件是负责让OFBiz知道资源的位置,同时让你加入到classpath中.
2. 这个'resource-loader name' 可以是任意字符串。这儿我们设为"main". 这个 'type' 告诉OFBiz我们将开始装载一个组件。
<resource-loader name="main" type="component"/>
3. 在<webapp>标签中,有不同的属性和它们的目的如下:
<webapp name="practice"
title="Practice"
server="default-server"
base-permission="OFBTOOLS"
location="webapp/practice"
mount-point="/practice"
app-bar-display="false"/>
a) name :- 定义我们web应用的名字。
b) title :- 这个将是应用的标识,会显示在顶端导航栏上。
c) server :- 这个让OFBiz知道使用哪个server
d) base-permission :- 这行要求用户要有OFBTOOLS权限才能使用这个应用。因为'admin'用户有这个权限,所以我们不必创建其它新用户。
e) location :- 在这个服务器上缺省基准路径的位置。
f) mount-point :- 这是访问资源的URL,应该是localhost:8080/practice
g) app-bar-display :- 这个是让OFBiz知道是否显示在主应用导航条上,这个是公用OFBiz修饰的一部分。
创建web应用
Step - 1 :在practice组件中创建一个"webapp"目录(hot-deploy/practice/webapp).,这个目录包含所有这组件相关的webapp目录。
Step - 2 :在webapp目录下创建一个子目录命名为"practice",这个就是我们要开发的webapp名称
(hot-deploy/practice/webapp/practice). 一个组件可以附加多个web应用。比如在"marketing"组件中有两个webapps "marketing" and "sfa"。我们创建的webapp将按照J2EE的Web应用标准。
Step - 3 :在你webapp下创建WEB-INF目录(hot-deploy/practice/webapp/practice/WEB-INF)。一个OFBiz的web应用要有两个配置文件:l和l。这l告诉OFBiz从访问者来的不同请求做不同的事:做什么动作和渲染什么页面。l告诉OFBiz什么资源(database and business logic access) 对这个web应用是有效的和如何处理web相关的事,比如welcome pages, redirects, and error pages。.
Step - 4创建一个命名为"l"(l遵守 j2ee web应用规范). 这个文件的内容可以从存在的任意组件中拷贝,比如 /framework/example组件. 需要改变的重要值是<display-name>、localDispatcherName和mainDecoratorLocation.
<context-param>
<param-name>localDispatcherName</param-name>
<param-value>practice</param-value>
<description>A unique name used to identify/recognize the local dispatcher for the Service Engine</description>
</context-param>
<context-param>
<param-name>mainDecoratorLocation</param-name>
<param-value>component://practice/l</param-value>
<description>The location of the main-decorator screen to use for this webapp; referred to as a context variable in screen def XML files.</description>
</context-param>
现在设置这个值: "component://practice/l" 作为这个位置,你一会就会知道原因。这个位置是用来指出在screens中的主修饰器位置的。象如下:
${parameters.mainDecoratorLocation},通过改变它增加了代码的独立性,当我们需要改变主修饰器
的位置。那时我们仅仅需要改为这个位置,将会应用到使用它的所有screen。在screen 中这样做的好处是可以从其它组件中重用已存在的screen,但是它用你的修饰器来修饰那个screen,仅仅是在相同模式用在所有地方和在所有组件中来显示mainDecoratorLocation.在这个应用开发的不远将来,当你在你的screen中增加修饰器的时候会集中到这点上。
Step - 5创建一个命名"l" (被ofbiz webapp控制器使用)的文件。这个文件开始是小而简单,但随后我们增加功能而快速增长。现在插入下列代码:
<?xml version="1.0" encoding="UTF-8"?>
<site-conf xmlns:xsi="/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="/dtds/site-conf.xsd">
<include
location="component://common/webcommon/l"/>
<description>Practice Component Site Configuration File</description>
<owner>Copyright 2001-2009 The Apache Software Foundation</owner>
<handler name="screen" type="view"
class="org.ofbiz.widget.screen.ScreenWidgetViewHandler"/> <!-- Request Mappings -->
<request-map uri="main">
<security https="false" auth="false"/>
<response name="success" type="view" value="main"/>
</request-map>
<!-- end of request mappings -->
<!-- View Mappings -->
<view-map name="main" type="screen"
page="component://practice/l#main"/>
<!-- end of view mappings -->
</site-conf>
Step - 6 :移到上一级,创建一个新的目录,命名为'error'(hot-deploy/practice/webapp/practice/error).
Step - 6.a :在"error"目录中创建一个文件. 这个文件的内容可以取自任意存在的组件中,比如example组件。
你显示错误信息页面的位置将被指定在l文件的开始位置,比如
<errorpage>/error/error.jsp</errorpage> .你需要创建或拷贝一个/webapp/practice/error/error.jsp向用户显示错误信息。
Step - 7 :在你的组件目录practice中创建一个"widget"(hot-deploy/practice/widget). 这个目录就包含forms, menus, and screens,用来处理用户界面的。
Step - 8 :在"widget"中创建文件"l".这个文件的内容可以取自任意组件中,例如example组件。自从现在开始,你将能开始创建screens视图,所以在这个地方一个重要的阅读是“Best Practices Guide (/display/OFBADMIN/Best+Practices+Guide)”。在这个页上链接到下面:
•HTML and CSS Best Practices
•Managing Your Source Differences
• Methodology Recommendations
•User Interface Layout Best Practices
jsp帮助文档所有这些阅读是真的有帮助。
最有可能开始的screen将会是如下:
•<?xml version="1.0" encoding="UTF-8"?>
•<screens xmlns:xsi="/2001/XMLSchema-instance"
•xsi:noNamespaceSchemaLocation="/dtds/widget-screen.xs d">
• <screen name="main">
• <section>
• <widgets>
• <label text="This is first practice"/>
• </widgets>
• </section>
• </screen>
•</screens>
Step - 9 :现在我们这里有基本的元素,让我们再检查基本流程,不管你的组件变得如何庞大和复杂。开始,通过浏览器来发动一个请求来看指定的资源。举例说明这个请求:"localhost:8080/practice/control/main"
1. 当OFBiz看到这个请求,首先检查/practice部分。这是因为在我们的l文件,我们指
出我们的web应用的装载点是/practice。现在知道我们的practice组件将处理余下的请求。
2. OFBiz将然后看我们的l文件。在我们的l文件有request-maps和view-maps。
如果它发现一个名字为'main'的request-map,它将使用相关联的view-map,如下所述。这个request-map 也能指定一个view或我们将会看到的event或service. 如果指定一个view将在l 文件中进一步查,看是否有在request-map指定值对应的view-map。
3. 现在我们继续保持简单,假定所有views到一个type=screen. 在这个情况下,页面标签指定一个路径到
screen定义文件而且一个screen名称显示在"#"符号后。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论