﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-&lt;font color="red"&gt;中國男人&lt;/font&gt;&lt;font color="lightgreen"&gt;大鹏一曰同风起，扶摇直上九万里&lt;/font&gt;-随笔分类-Ofbiz</title><link>http://www.blogjava.net/liaojiyong/category/14093.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 28 Feb 2007 06:49:24 GMT</lastBuildDate><pubDate>Wed, 28 Feb 2007 06:49:24 GMT</pubDate><ttl>60</ttl><item><title>安装ofbiz+tomcat+oracle</title><link>http://www.blogjava.net/liaojiyong/archive/2006/08/15/63641.html</link><dc:creator>liaojiyong</dc:creator><author>liaojiyong</author><pubDate>Tue, 15 Aug 2006 03:31:00 GMT</pubDate><guid>http://www.blogjava.net/liaojiyong/archive/2006/08/15/63641.html</guid><wfw:comment>http://www.blogjava.net/liaojiyong/comments/63641.html</wfw:comment><comments>http://www.blogjava.net/liaojiyong/archive/2006/08/15/63641.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liaojiyong/comments/commentRss/63641.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liaojiyong/services/trackbacks/63641.html</trackback:ping><description><![CDATA[
		<p>这个文章描述的是安装ofbiz在oracle+tomcat环境 
</p>
		<p>ofbiz2.11提供的缺省的webserver是jetty,由于我比较习惯tomcat，因此打算把他转移到tomcat上来。 
</p>
		<p>ofbiz2.11提供的却省的数据库是hsql的，用webtools，转移他的数据库是非常方便的，这里我介绍如何按装到oracle中， 
</p>
		<p>同样的方法我也在mysql中测试通过了。 
</p>
		<p>1。下载ofbiz2.11 
</p>
		<p>可以通过www.ofbiz.org下载，不过需要代理，也可以直接到http://sf.net上面查找ofbiz项目下载。 
</p>
		<p>2。下载tomcat 
</p>
		<p>建议使用tomcat4.1.24,曾经在网上看到过有人介绍tomcat.4.1.7之前的版本运行ofbiz时，taglib的处理非常慢， 
</p>
		<p>之后的版本就没有这个问题了。tomcat可以到www.apache.org处下载。 
</p>
		<p>3。安装oracle 
</p>
		<p>理论上数据库可以是任何支持jdbc的数据库，我使用的是oracle8.17. 
</p>
		<p>3.1建立oracle表空间 
</p>
		<p>createtablespaceofbiz 
</p>
		<p>datafile'd:\orant\oradata\ofbiz.dbf'size2m 
</p>
		<p>autoextendonnext2mmaxsizeunlimited; 
</p>
		<p>3.2建立用户 
</p>
		<p>createuserofbiz 
</p>
		<p>identifiedbyofbiz 
</p>
		<p>defaulttablespaceofbiz; 
</p>
		<p>grantconnect,resourcetoofbiz; 
</p>
		<p>测试用户 
</p>
		<p>connectofbiz/ofbiz; 
</p>
		<p>4。安装ofbiz 
</p>
		<p>4.1设置环境变量 
</p>
		<p>JAVA_HOME 
</p>
		<p>ANT_HOME 
</p>
		<p>CATALINA_HOME 
</p>
		<p>OFBIZ_HOME 
</p>
		<p>4.2自动安装 
</p>
		<p>ofbiz已经准备了一个ant脚本，它可以自动安装ofbiz到。 
</p>
		<p>在OFBIZ_HOME中有一个build.xml,执行antinstall即可。 
</p>
		<p>但是这个自动脚本有的时候执行时会出错！如果出错，请看4。3手工安装。 
</p>
		<p>4.3手工安装 
</p>
		<p>4。3。1 
</p>
		<p>复制OFBIZ_HOME\commonapp\etc\目录下面的所有文件到CATALINA_HOME\share\classes中。 
</p>
		<p>复制OFBIZ_HOME\commonapp\lib\目录下*.jar到CATALINA_HOME\share\lib中。 
</p>
		<p>复制OFBIZ_HOME\core\lib\目录下*.jar到CATALINA_HOME\share\lib中。 
</p>
		<p>复制OFBIZ_HOME\lib\目录下*.jar到CATALINA_HOME\share\lib中。 
</p>
		<p>注意OFBIZ_HOME\lib\中的jar文件是按目录分门别类存放的，复制到CATALINA_HOME\share\lib需要去掉所有目录，把所有jar都放到lib目录下。 
</p>
		<p>4。3。2 
</p>
		<p>编辑CATALINA_HOME\share\classes\entityengine.xml 
</p>
		<p>查找 
</p>
		<p>
				<datasourcename>
						<p>helper-class="org.ofbiz.core.entity.GenericHelperDAO" 
</p>
						<p>field-type-name="oracle" 
</p>
						<p>check-on-start="true" 
</p>
						<p>add-missing-on-start="true" 
</p>
						<p>join-style="theta-oracle"&gt; 
</p>
						<p>
								<sql-load-pathpath ofbiz.home"="" />
						</p>
						<p>
								<sql-load-pathpath ofbiz.home"="" />
						</p>
						<p>
								<inline-jdbc>
										<p>jdbc-driver="oracle.jdbc.driver.OracleDriver" 
</p>
										<p>jdbc-uri="jdbc:oracle:thin:@127.0.0.1:1521:ofbiz" 
</p>
										<p>jdbc-username="ofbiz" 
</p>
										<p>jdbc-password="ofbiz" 
</p>
										<p>isolation-level="ReadCommitted"/&gt; 
</p>
										<p>
										</p>
										<p>将jdbc部分改成对应的参数。 
</p>
										<p>查找 
</p>
										<p>
												<delegatorname entity-model-reader="MAIN" ......="">
														<p>
																<group-mapgroup-name datasource-name="LOCALHSQL" />
														</p>
														<p>
														</p>
														<p>改成 
</p>
														<p>
																<delegatorname entity-model-reader="MAIN" ......="">
																		<p>
																				<group-mapgroup-name datasource-name="LOCALORACLE" />
																		</p>
																		<p>
																		</p>
																		<p>4.3.3 
</p>
																		<p>复制OFBIZ_HOME\setup\catalina41\bin中的ofbiz.bat到CATALINA_HOME\bin中 
</p>
																		<p>复制OFBIZ_HOME\setup\catalina41\conf中的server.xml到CATALINA_HOME\conf中 
</p>
																		<p>注意，这里的server.xml也可以不复制，这里面就是配置ofbiz的Context，手工更新到server.xml中即可 
</p>
																		<p>另外注意，ofbiz默认ofbiz和tomcat在一个目录下，因此在server.xml中，他的context路径都是用的相对路径 
</p>
																		<p>例如 
</p>
																		<p>
																		</p>
																		<p>在OFBIZ_HOME\setup\catalina41\bin\runofbiz.bat 
</p>
																		<p>内容如下： 
</p>
																		<p>ofbiz.batrun 
</p>
																		<p>5.0运行runofbiz.bat 
</p>
																		<p>他首先调用ofbiz.bat设置环境变量，然后启动tomcat. 
</p>
																		<p>启动tomcat的时候，ofbiz的DatabaseUtils会检查数据库中是否已经存在系统的表，没有就会自动创建的，一般的创建过程不会出错误的。 
</p>
																		<p>如果有错误产生，请察看CATALINA_HOME\logs中的日志文件，一般都是少某个jar,看到少哪个到OFBIZ_HOME中找到后复制到CATALINA_HOME\share\lib中 
</p>
																		<p>6.0如果建立表都一切顺利就可以打开IE，然后输入URL 
</p>
																		<p>http://localhost:8080/webtools/control/main 
</p>
																		<p>记住要先用webtools导入数据，否则你不能用admin/ofbiz登陆的！ 
</p>
																		<p>在这里http://localhost:8080/webtools/control/install 
</p>
																		<p>直接点LoadData按钮 
</p>
																		<p>执行完毕后 
</p>
																		<p>到这里 
</p>
																		<p>http://localhost:8080/webtools/control/checkLogin/install 
</p>
																		<p>用admin/ofbiz登陆，登陆成功证明安装完毕，不成功就察看一下日志文件。 
</p>
																		<p>在4。3。2步中，如果要安装到其他的数据库，可以修改其他数据库的jdbc连接配置，ofbiz为大部分支持jdbc的数据库提供的例子。 
</p>
																		<p>同样的方法也可以实施ofbiz到resin中,不过没有测试!:) 
</p>
																		<p>测试环境 
</p>
																		<p>SERVER:PII300,512M 
</p>
																		<p>PIII733,256M 
</p>
																		<p>windows2000advanceserver 
</p>
																		<p>ofbiz2.11 
</p>
																		<p>oracle8.1.7 
</p>
																		<p>mysql4.0max 
</p>
																		<p>tomcat4.1.24</p>
																</delegatorname>
														</p>
												</delegatorname>
										</p>
								</inline-jdbc>
						</p>
				</datasourcename>
		</p>
<img src ="http://www.blogjava.net/liaojiyong/aggbug/63641.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liaojiyong/" target="_blank">liaojiyong</a> 2006-08-15 11:31 <a href="http://www.blogjava.net/liaojiyong/archive/2006/08/15/63641.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ofbiz实体引擎结合jbuilder的配置</title><link>http://www.blogjava.net/liaojiyong/archive/2006/08/15/63639.html</link><dc:creator>liaojiyong</dc:creator><author>liaojiyong</author><pubDate>Tue, 15 Aug 2006 03:29:00 GMT</pubDate><guid>http://www.blogjava.net/liaojiyong/archive/2006/08/15/63639.html</guid><wfw:comment>http://www.blogjava.net/liaojiyong/comments/63639.html</wfw:comment><comments>http://www.blogjava.net/liaojiyong/archive/2006/08/15/63639.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liaojiyong/comments/commentRss/63639.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liaojiyong/services/trackbacks/63639.html</trackback:ping><description><![CDATA[1.1 配置<br />这一节将给出实体引擎在jbuider中单独使用的配置向导<br />本文是从ofbiz网站的（OFBiz Quick Start Guide by Brett G. Palmer）的基础上完成配置。<br /><br />1．从www.ofbiz.org中下载ofbiz-XX-XX-complete.zip包，本文用的是ofbiz-2.1.1-apps.zip<br />解开放到某个目录下，本文在j:\ofbiz,这也就是ofbiz.home的值<br />2．建立jbuilder项目，如下图所示<br /><br /><br />3．加入源文件，<br />ofbiz.home/core/src/entiry<br />ofbiz.home/core/src/share<br /><br /><br />4．加入所用到的jar文件<br />ofbiz.home/lib/common<br />ofbiz.home/lib/compile<br />ofbiz.home/lib/jasterreports<br />ofbiz.home/lib/jotm<br />ofbiz.home/lib/scripting<br />ofbiz.home/lib/share<br />ofbiz.home/lib/tyrex<br /><br /><br /><br />5．将配置文件等导入工程<br />将ofbiz.home/commonapp/etc下所有文件打到ofbiz_etc.jar包内<br />jar cvf ofbiz_etc.jar *<br />将ofbiz.home/core/docs/xmldefs/ofbiz下所有文件打到ofbiz_dtd.jar包内<br />jar cvf ofbiz_dtd.jar *<br /><br />将这两个包引入工程。<br /><br />6．将ofbiz.home\setup\jrun4\servers\ofbiz\SERVER-INF\jndi.properties文件放入<br />ofbiz.home\lib\jotm\jotm.jar包内<br /><br />7．配置ofbiz.home<br />在项目run tab中加入vm parameter:<br />-Dofbiz.home=j:\ofbiz<br /><br />8．在GenericDelegator.java中，将下面语句注释掉。<br />/* <br />// setup the Entity ECA Handler<br />try {<br />Class eecahClass = loader.loadClass(ECA_HANDLER_CLASS_NAME);<br />this.entityEcaHandler = (EntityEcaHandler) eecahClass.newInstance();<br />this.entityEcaHandler.setDelegator(this);<br />} catch (ClassNotFoundException e) {<br />Debug.logWarning(e, "EntityEcaHandler class with name " + ECA_HANDLER_CLASS_NAME + " was not found, Entity ECA Rules will be disabled");<br />} catch (InstantiationException e) {<br />Debug.logWarning(e, "EntityEcaHandler class with name " + ECA_HANDLER_CLASS_NAME + " could not be instantiated, Entity ECA Rules will be disabled");<br />} catch (IllegalAccessException e) {<br />Debug.logWarning(e, "EntityEcaHandler class with name " + ECA_HANDLER_CLASS_NAME + " could not be accessed (illegal), Entity ECA Rules will be disabled");<br />} catch (ClassCastException e) {<br />Debug.logWarning(e, "EntityEcaHandler class with name " + ECA_HANDLER_CLASS_NAME + " does not implement the EntityEcaHandler interface, Entity ECA Rules will be disabled");<br />}<br />*/<br /><br /><br />9．测试文件Test.java<br />package org.ofbiz.core;<br /><br />import org.ofbiz.core.entity.GenericDelegator;<br />import org.ofbiz.core.entity.GenericValue;<br />import org.ofbiz.core.util.UtilMisc;<br />import org.ofbiz.core.entity.*;<br /><br /><br />public class Test {<br />public static void main(String[] args) {<br />System.out.println("Entered testFindByPrimaryKey");<br />//Instantiate the delegator.<br />GenericDelegator delegator = GenericDelegator.getGenericDelegator("default");<br /><br /><br />// Find book by primary key<br />try {<br />GenericValue party= delegator.findByPrimaryKey("PartyType",<br />UtilMisc.toMap("partyTypeId", "PERSON"));<br />}<br />catch (GenericEntityException ex1) {<br />}<br />return;<br />}<br /><br />}<br /><br />10.ok<br /><img src ="http://www.blogjava.net/liaojiyong/aggbug/63639.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liaojiyong/" target="_blank">liaojiyong</a> 2006-08-15 11:29 <a href="http://www.blogjava.net/liaojiyong/archive/2006/08/15/63639.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ofbiz 入门教程(转)</title><link>http://www.blogjava.net/liaojiyong/archive/2006/08/15/63638.html</link><dc:creator>liaojiyong</dc:creator><author>liaojiyong</author><pubDate>Tue, 15 Aug 2006 03:25:00 GMT</pubDate><guid>http://www.blogjava.net/liaojiyong/archive/2006/08/15/63638.html</guid><wfw:comment>http://www.blogjava.net/liaojiyong/comments/63638.html</wfw:comment><comments>http://www.blogjava.net/liaojiyong/archive/2006/08/15/63638.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liaojiyong/comments/commentRss/63638.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liaojiyong/services/trackbacks/63638.html</trackback:ping><description><![CDATA[
		<pre>原创 Ofbiz 入门教程

1.Ofbiz 介绍：

  Ofbiz(http://www.ofbiz.org) 是 Open Source 的商务软件系统，充分利用了各优秀的的Open Source 项目，
像 Tomcat, Ant, BeanShell, Jboss 等，构建了一个强大的系统平台，Ofbiz 已经完成了大部分商务类软件系统
都需要的部件，像用户认证、工作流、商务规则处理等，Ofbiz 的核心技术在于 Entity Engine，其他的组件基本都
是基于它的。简单来说 Entity Engine 的主要功能是将数据库表创建、对象与数据表的映射、对象的查询等做了强大
封装，你可以在一个简单的 XML 文件中定义数据库表结构，Ofbiz 会自动帮你在数据库建表，并动态生成映射对象，
你在程序中可以只考虑对 Object 的处理，Ofbiz 会自动通过事务逻辑更新到数据库中。Ofbiz 宣称的优点之一是用
很少的 Code 完成复杂的处理。 

2.Ofbiz 下载与安装

  首先要安装 J2SDK1.4，到 http://java.sun.com 上下载，安装后设定 JAVA_HOME 环境变量为 J2SDK 的安装目录。

  访问网站 http://www.ofbiz.org，上面有下载的连接，请选择 Complete 包，因为这个包中已经包含了运行 Ofbiz 
的所有东西，下载下来解开后就可以运行了。

  解开 Ofbiz 包到一个目录下，假设是 “C:\ofbiz”，该目录下将会有 catalina 和 ofbiz 两个目录， catalina 
目录是 Tomcat 的目录，Ofbiz 对其配置做了修改，ofbiz 目录是 Ofbiz 的程序代码目录。在命令行状态下进入 
“c:\ofbiz\catalina\bin” 目录，运行“ ofbiz run”命令，就可以启动 Ofbiz，启动后你可以用浏览器访问 
“http://localhost:8080/ecommerce”，这可以访问 Ofbiz 的电子商务模块，通过页面上面的连接你可以访问到
其他模块。


3.Ofbiz Schema 的创建 

Ofbiz 应用入门：

  以一个实例说明，假设我们需要建一个客户资料表，起名为 StudyCustomer，各个段分别如下：
  StudyCustomer {
    customerId      Integer,
    customerName    String,
    customerNote    String,
  }

  我们来实现基本的数据操作---增/删/改/查询，具体步骤如下：


  1.在 XML 文件中定义数据 Schema：
    需要用到三个文件，一个是我们要建的项目的 entitymodel_xxx.xml 和 entityengine.xml，还有
    entitygroup.xml,
    entitymodel_xxx.xml 是需要我们自己创建的，假设我们起名为 entitymodel_study.xml，放在 
                “c:\ofbiz\ofbiz\commonapp\entitydef”目录下，
    entityengine.xml 是 Ofbiz 已经有的，放在 “c:\ofbiz\commonapp\etc”目录下，用来包含我们
                定义的 entitymodel 文件。
    entitygroup.xml  也是 Ofbiz 已经有的，跟 engityengine.xml 在同一目录下，我们需要把我们的
                Schema 定义加入到该文件中

    entitymodel_study.xml 文件的定义格式如下：
&lt;!--================================================================================--&gt;

&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;!DOCTYPE entitymodel PUBLIC "-//OFBiz//DTD Entity Model//EN" 

"http://www.ofbiz.org/dtds/entitymodel.dtd"&gt;

&lt;entitymodel&gt;
   &lt;title&gt;Entity of an Open For Business Project Component&lt;/title&gt;
   &lt;description&gt;None&lt;/description&gt;
   &lt;copyright&gt;Copyright (c) 2002 The Open For Business Project - www.ofbiz.org&lt;/copyright&gt;
   &lt;author&gt;None&lt;/author&gt;
   &lt;version&gt;1.0&lt;/version&gt;

  &lt;!-- ========================================================= --&gt;
  &lt;!-- ======================== Data Model ===================== --&gt;
  &lt;!-- The modules in this file are as follows:                  --&gt;
  &lt;!--  - org.ofbiz.commonapp.study --&gt;
  &lt;!-- ========================================================= --&gt;


  &lt;!-- ========================================================= --&gt;
  &lt;!-- org.ofbiz.commonapp.study --&gt;
  &lt;!-- ========================================================= --&gt;

   &lt;entity entity-name="StudyCustomer"
         package-name="org.ofbiz.commonapp.study"
   title="Study Customer Entity"&gt;
 &lt;field name="customerId" type="id-ne"&gt;&lt;/field&gt;
 &lt;field name="customerName" type="long-varchar"&gt;&lt;/field&gt;
 &lt;field name="customerNote" type="long-varchar"&gt;&lt;/field&gt;
 &lt;prim-key field="customerId"/&gt;
  &lt;/entity&gt;
 &lt;/entitymodel&gt;

&lt;!--================================================================================--&gt;

  这个 XML 文件中的 Tag 基本是看得明白的，只是 field 的 type 是 Ofbiz 已经预定义好的，这
是为了保证数据库间的迁移。

  在 entityengine.xml 加入我们刚才定义的文件，加入一行在合适的位置：
   &lt;resource loader="mainfile" location="entitymodel_study.xml"/&gt;
  具体放的位置我们可以通过查看 entityengine.xml 找到，里面已经有加好的其他文件。

  在 entitygroup.xml 加入我们的 Schema 定义，在后面加入一行
   &lt;entity-group group="org.ofbiz.commonapp" entity="StudyCustomer" /&gt;

  这样我们就定义好了 Schema，现在把 c:\ofbiz\commonapp\etc\entityengine.xml 拷贝到
  c:\ofbiz\catalina\shared\classes 目录下，这点要切记，我以前就因为没有拷贝，最后 Schema
  怎么也创建不了。

  重新启动 Ofbiz，访问 URL: http://localhost:8080/webtools，点击右上方的 "Login" 链接，
  用 admin/ofbiz 登录，登录进入后选择链接“Check/Update Database”，这时会出现 Check 的 Form，
  该表单可以只检验 Schema 是否改变，默认的 GroupName 是“org.ofbiz.commonapp”，这个不需要变，
  点击“Check Only”按钮，Ofbiz 会检验变动情况，显示出一个完整的列表，你可以查一下是否有我们刚建的
  "StudyCustomer"，如果没有，可能是我们前面定义的有些问题，检查一下再重新做。

  在检查到以后，可以再选择“Check and Add Missing”，这是 Ofbiz 很强大的一个功能，你在 XML 中新
  增了表，或在某个表中新增了段，它会自动映射到数据库中，避免我们去直接操作数据库。

  现在已经完成了 StudyCustomer Schema 的创建,如果想检验一下是否有表创建，我们可以用编辑器打开
  c:\ofbiz\data\ofbiz.script ，在里面查询 CREATE TABLE StudyCustomer 的字样，如果前面没有
  问题，我们可以找到的。

 

4.如何使用已经定义的 Schema

如何使用已经定义的 Schema

   Ofbiz 遵循 MVC 的设计模式，在 View 端，即 JSP 端主要使用 Ofbiz 定义的 Tag 来显示或
   提取数据，Control 是一个 Controller Servlet，我们在 Controller Servlet 的 URI mapping
   配置文件中定义各 URL 应该指向什么程序，这样，通过这个 mapping 配置文件，可以保证我们各个页面
   及具体处理程序之间的独立性，例我们可以通过修改这个配置文件就可以改变某个 Form 的 Post Action
   的 URL，而不需要修改实际的 HTML 或 JSP 代码。

   Ofbiz 中定义了 Regions 的概念，即将一个 HTML 页面分成几个区域，像 Top, Left, Right, Main
   等，通过这些 Regions 我们可以方便的组合 UI 界面，并且可以方便改变各部分所处的位置，如我们可以
   把菜单很容易的从上方移到下方，只需要改变一个配置文件。Regions 类似于 HTML 中的 Frame，但它是
   通过一个页面来组合界面，Frame 是通过几个页面显示在不同的帧中，Frame 的控制比较复杂，而且需要
   改变相关的程序。

   在 Ofbiz 中，我们可以直接在 JSP 中操作 Schema 定义的 Object，即我们刚定义的 StudyCustomer，
   示例如下：


&lt;%@ taglib uri="ofbizTags" prefix="ofbiz" %&gt;

&lt;%@ page import="java.util.*" %&gt;
&lt;%@ page import="org.ofbiz.core.util.*, org.ofbiz.core.pseudotag.*" %&gt;
&lt;%@ page import="org.ofbiz.core.entity.*" %&gt;

&lt;jsp:useBean id="delegator" type="org.ofbiz.core.entity.GenericDelegator" scope="request" /&gt;
&lt;jsp:useBean id="security" type="org.ofbiz.core.security.Security" scope="request" /&gt;

&lt;%if(security.hasEntityPermission("PARTYMGR", "_VIEW", session)) {%&gt;

&lt;%
  try {
    delegator.create("StudyCustomer",
      UtilMisc.toMap("customerId","1","customerName","Cust1","customerNote","Customer Note 1"));

    Iterator custs =               

UtilMisc.toIterator(delegator.findAll("StudyCustomer",UtilMisc.toList("customerId","customerName","customerNote")));

    while(custs.hasNext())
    {
 GenericValue cust = (GenericValue)custs.next();
 out.println(cust.getString("customerId"));
 out.println(cust.getString("customerName"));
 out.println(cust.getString("customerNote"));
    }
  } catch(Exception e)
  {
    out.println(e.getMessage());
  }
%&gt;
&lt;%}else{%&gt;
  &lt;h3&gt;You do not have permission to view this page. ("PARTYMGR_VIEW" or "PARTYMGR_ADMIN" needed)&lt;/h3&gt;
&lt;%}%&gt;


  这段程序挺容易理解，先是通过 delegator 创建一个 Object，该 Object 将会由 Ofbiz 自动同步到
数据库中。然后通过 delegator 的 findAll 取到所有已保存的 Object，最后通过一个 Iterator 对象
显示出来。

  这个程序起名为 testofbiz.jsp，为简单起见，我们放到 Ofbiz 已有的一个 Webapp 的目录下，放到
c:\ofbiz\ofbiz\partymgr\webapp\party 目录下。然后我们需要修改两个配置文件：controller.xml
和 regions.xml，这两个文件就是我们上面提到的 mapping 和 regions 配置文件。

  这两个文件都在：c:\ofbiz\ofbiz\partymgr\webapp\WEB-INF 下，在 controller.xml 中加入下面

   &lt;request-map uri="testofbiz"&gt;
      &lt;description&gt;Test Ofbiz&lt;/description&gt;
      &lt;security https="false" auth="false"/&gt;
      &lt;response name="success" type="view" value="testofbiz"/&gt;
   &lt;/request-map&gt;
  和
   &lt;view-map name="testofbiz" type="region"/&gt;
  
  加入位置请参照 controller.xml 中已经有的配置。在 regions.xml 中加入：
   &lt;define id='testofbiz' region='MAIN_REGION'&gt;
       &lt;put section='title'&gt;Test Ofbiz&lt;/put&gt;
       &lt;put section='content' content='/party/testofbiz.jsp'/&gt;
   &lt;/define&gt;
  具体加入位置请参考已有的配置。

  配置完后，重新启动 ofbiz，然后访问 URL:
  http://localhost:8080/partymgr/control/testofbiz

  由于我们在 testofbiz.jsp 程序中使用了 Ofbiz 的安全控制机制，系统会提示现在没有访问
  权限，需要登录，点击右边的“Login” 用 admin/ofbiz 登录后会看到我们程序 testofbiz.jsp
  的运行结果。如果需要增加新记录，请修改

  UtilMisc.toMap("customerId","1","customerName","Cust1","customerNote","Customer Note 1"));

  中的各个段的值，然后再访问 http://localhost:8080/partymgr/control/testofbiz，如果不修改
  而直接访问那个 URL 时，系统会提示 Primary key 冲突。


5.按照显示与逻辑分离的原则使用 Schema:

  上篇讲了如何在 JSP 中使用创建的 Schema 对象，这次我们来讲述一下如何把程序
逻辑放到 JavaBeans 中，把显示处理放到 JSP 中，并使用 controller.xml 将两
部分整合起来。

  首先我们来创建一个 JavaBeans，来完成Add/Get/Delete/Update Schema 对象
的操作，程序文件名为 TestOfbiz.java，放置在 
  c:\ofbiz\ofbiz\testOfbiz\com\geeyo\ofbiz 目录下, 具体程序如下：

&gt;=================================================================
package com.geeyo.ofbiz;

import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
import java.net.*;
import org.ofbiz.core.util.*;
import org.ofbiz.core.entity.*;
import org.ofbiz.core.service.*;
import org.ofbiz.core.security.*;
import org.ofbiz.core.stats.*;

public class TestOfbiz
{
  public static void main(String[] args)
  throws Exception
  {
     GenericDelegator delegator = GenericDelegator.getGenericDelegator("default");
     delegator.create("StudyCustomer",UtilMisc.toMap("customerId","3","customerName","Kane3","customerNote","This is test customer.3"));

     Iterator custs = UtilMisc.toIterator(delegator.findAll("StudyCustomer",UtilMisc.toList("customerId","customerName","customerNote")));

     while(custs.hasNext())
     {
        GenericValue cust = (GenericValue)custs.next();
        System.out.println(cust.getString("customerId"));
        System.out.println(cust.getString("customerName"));
        System.out.println(cust.getString("customerNote"));
     }
  }

  public static String createNewRecord(HttpServletRequest request, HttpServletResponse response)
  throws Exception
  {
     Map paras = UtilMisc.getParameterMap(request);

     GenericDelegator delegator = GenericDelegator.getGenericDelegator("default");
     delegator.create("StudyCustomer",paras);

     return "success";
  }

  public static String lookAllRecords(HttpServletRequest request, HttpServletResponse response)
  throws Exception
  {
     GenericDelegator delegator = GenericDelegator.getGenericDelegator("default");
     Iterator custs = UtilMisc.toIterator(delegator.findAll("StudyCustomer",UtilMisc.toList("customerId","customerName","customerNote")));

     Collection col = new ArrayList();

     while(custs.hasNext())
     {
        GenericValue cust = (GenericValue)custs.next();
        col.add(cust);
   
     }

     request.getSession().setAttribute("search_results",col);

     return "success";
  }

  public static String findRecord(HttpServletRequest request, HttpServletResponse response)
  throws Exception
  {
     String id = (String)request.getParameter("customerId");

     GenericDelegator delegator = GenericDelegator.getGenericDelegator("default");

     try {
        GenericValue cust = delegator.findByPrimaryKey("StudyCustomer",UtilMisc.toMap("customerId",id));

        request.getSession().setAttribute("edit_cust",cust);
     } catch (GenericEntityException gee) {
        Debug.logWarning(gee);
     }

     return "success";
  } 

  public static String updateRecord(HttpServletRequest request, HttpServletResponse response)
  throws Exception
  {
     Map paras = UtilMisc.getParameterMap(request);

     GenericDelegator delegator = GenericDelegator.getGenericDelegator("default");
     GenericValue cust = delegator.findByPrimaryKey("StudyCustomer",UtilMisc.toMap("customerId",paras.get("customerId")));
     cust.setNonPKFields(paras);
     cust.store();

     request.getSession().setAttribute("edit_cust",cust);

     return "success";
  }

  public static String removeRecord(HttpServletRequest request, HttpServletResponse response)
  throws Exception
  {
     String strId = request.getParameter("id");
     GenericDelegator delegator = GenericDelegator.getGenericDelegator("default");
     GenericValue cust = delegator.findByPrimaryKey("StudyCustomer",UtilMisc.toMap("customerId",strId));
     cust.remove();

     return "success";
  }
 
}


&gt;=================================================================


程序中的处理大部分可以看懂的，其中有个功能，是
  Map paras = UtilMisc.getParameterMap(request);
这是 Ofbiz 的一个有趣但非常有用的功能，它是把 request 中各段的名字和值映射到一个 Map
对象中，然后使用
  cust.setNonPKFields(paras);
就可以赋给 Object cust 的各个段，免了我们使用 request.getParameter("name")来取各个
值，在值很多的时候这个功能可以大大减少冗余代码量。

  基本程序的逻辑是这样的，
  1.从 request 读取传来的值
 2.使用 delegator 来处理，Add/Update/Delete/Query
  3.将返回结果放到 Session 中传给 JSP

  我做了个 Ant build.xml 文件可以帮助编译，把这个文件放在:
   c:\ofbiz\ofbiz\testOfbiz\ 目录下，然后在命令行窗口下进入该目录，敲入 ant
  来编译（需要保证已经安装 Ant），编译后的 .class 会放在
   c:\ofbiz\ofbiz\testOfbiz\com\geeyo\ofbiz 下，
  拷贝 c:\ofbiz\ofbiz\testofbiz\com 目录到 c:\ofbiz\ofbiz\partymgr\webapp\WEB-INF\classes
  目录下。

  build.xml
&gt;=============================================================================

&lt;project name="TestOfbiz" default="dist" basedir="."&gt;
    &lt;description&gt;
	   Test ofbiz
    &lt;/description&gt;

  &lt;!--test cvs--&gt;
  &lt;!-- set global properties for this build --&gt;

  &lt;property name="src" location="."/&gt;
  &lt;property name="build" location="."/&gt;

  &lt;property name="lib_dir"  location="c:/ofbiz/catalina/shared/lib"/&gt;
  &lt;property name="lib1_dir"  location="c:/ofbiz/catalina/common/lib"/&gt;

  &lt;path id="project.class.path"&gt;
    &lt;fileset dir="${lib_dir}"&gt;
       &lt;include name="*.jar"/&gt;
    &lt;/fileset&gt;
    &lt;fileset dir="${lib1_dir}"&gt;
       &lt;include name="*.jar"/&gt;
    &lt;/fileset&gt;
  &lt;/path&gt;

  &lt;target name="init"&gt;
    &lt;!-- Create the time stamp --&gt;
    &lt;tstamp/&gt;
    &lt;!-- Create the build directory structure used by compile --&gt;
    &lt;mkdir dir="${build}"/&gt;
  &lt;/target&gt;

  &lt;target name="compile" depends="init"
        description="compile the source " &gt;
    &lt;!-- Compile the java code from ${src} into ${build} --&gt;
    &lt;javac srcdir="${src}" destdir="${build}"&gt;
      &lt;classpath refid="project.class.path"/&gt;
    &lt;/javac&gt;
  &lt;/target&gt;

  &lt;target name="dist" depends="compile"
        description="generate the distribution" &gt;
    &lt;!-- Create the distribution directory --&gt;
  &lt;/target&gt;

  &lt;target name="clean"
        description="clean up" &gt;
    &lt;!-- Delete the ${build} and ${dist} directory trees --&gt;
  &lt;/target&gt;
&lt;/project&gt;


&gt;=============================================================================

然后我们来创建 JSP 程序，JSP 程序全部放在 
  c:\ofbiz\ofbiz\partymgr\webapp\party 下面

  1.listofbiz.jsp
&gt;=============================================================================

&lt;%@ taglib uri="ofbizTags" prefix="ofbiz" %&gt;

&lt;%@ page import="java.util.*, org.ofbiz.core.service.ModelService" %&gt;
&lt;%@ page import="org.ofbiz.core.util.*, org.ofbiz.core.pseudotag.*" %&gt;
&lt;%@ page import="org.ofbiz.core.entity.*" %&gt;
&lt;jsp:useBean id="security" type="org.ofbiz.core.security.Security" scope="request" /&gt;
&lt;jsp:useBean id="delegator" type="org.ofbiz.core.entity.GenericDelegator" scope="request" /&gt;

&lt;script language="JavaScript"&gt;
  function confirmDelete()
  {
     return confirm("Are your sure to delete?");
  }
&lt;/script&gt;


&lt;%if(security.hasEntityPermission("PARTYMGR", "_VIEW", session)) {%&gt;

&lt;table width="600" align="center"&gt;
  &lt;ofbiz:if name="search_results"&gt;
   &lt;tr&gt;&lt;th&gt;Id&lt;/th&gt;&lt;th&gt;Name&lt;/th&gt;&lt;th&gt;Note&lt;/th&gt;&lt;th&gt;&lt;/th&gt;&lt;/tr&gt;
    &lt;ofbiz:iterator name="cust" property="search_results"&gt;
      &lt;tr&gt;
        &lt;td&gt;&lt;ofbiz:entityfield attribute="cust" field="customerId"/&gt;&lt;/td&gt;
        &lt;td&gt;&lt;ofbiz:entityfield attribute="cust" field="customerName"/&gt;&lt;/td&gt;
        &lt;td&gt;&lt;ofbiz:entityfield attribute="cust" field="customerNote"/&gt;&lt;/td&gt;
        &lt;td&gt;
          &lt;a href='&lt;ofbiz:url&gt;/showtest?customerId=&lt;ofbiz:entityfield attribute="cust" field="customerId"/&gt;&lt;/ofbiz:url&gt;' class="buttontext"&gt;[Edit]&lt;/a&gt;
          &lt;a href='&lt;ofbiz:url&gt;/removetest?customerId=&lt;ofbiz:entityfield attribute="cust" field="customerId"/&gt;&lt;/ofbiz:url&gt;' class="buttontext" onclick="return confirmDelete()"&gt;[Remove]&lt;/a&gt;
        &lt;/td&gt;
      &lt;/tr&gt;
     &lt;/ofbiz:iterator&gt;
    &lt;/ofbiz:if&gt;
&lt;/table&gt;
&lt;table width="200" align="center"&gt;
  &lt;tr&gt;
  &lt;td&gt;&lt;a href='&lt;ofbiz:url&gt;/createTestForm&lt;/ofbiz:url&gt;'&gt;Create customer&lt;/a&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;

&lt;%}else{%&gt;
  &lt;h3&gt;You do not have permission to view this page. ("PARTYMGR_VIEW" or "PARTYMGR_ADMIN" needed)&lt;/h3&gt;
&lt;%}%&gt;

&gt;=============================================================================

 上面程序中需要说明的是
  &lt;ofbiz:if name="search_results"&gt;
 和
  &lt;ofbiz:iterator name="cust" property="search_results"&gt;，
 
 &lt;ofbiz:if name="search_results"&gt; 是用来检验在 session 或 pageContext 对象
中是否包含 search_results 对象，该对象是由我们的程序放到 session 中的。
 &lt;ofbiz:iterator name="cust" property="search_results"&gt; 是用来循环读取对象
search_results（是个 Collection 对象）中存储的各对象，并赋给cust，然后在循环体
中，我们就可以用 cust 对象来读取各个段的值了。


2.createofbiz.jsp
&gt;=============================================================================

&lt;%@ taglib uri="ofbizTags" prefix="ofbiz" %&gt;

&lt;%@ page import="java.util.*, org.ofbiz.core.service.ModelService" %&gt;
&lt;%@ page import="org.ofbiz.core.util.*, org.ofbiz.core.pseudotag.*" %&gt;
&lt;%@ page import="org.ofbiz.core.entity.*" %&gt;
&lt;jsp:useBean id="security" type="org.ofbiz.core.security.Security" scope="request" /&gt;
&lt;jsp:useBean id="delegator" type="org.ofbiz.core.entity.GenericDelegator" scope="request" /&gt;
&lt;%if(security.hasEntityPermission("PARTYMGR", "_VIEW", session)) {%&gt;

&lt;form method="post" action="&lt;ofbiz:url&gt;/createTest&lt;/ofbiz:url&gt;" name="createofbiz"&gt;
&lt;table width="300" align="center"&gt;
  &lt;tr&gt;
   &lt;td&gt;Id&lt;/td&gt;&lt;td&gt;&lt;input type="text" name="customerId" size="20"&gt;&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;Name&lt;/td&gt;&lt;td&gt;&lt;input type="text" name="customerName" size="20"&gt;&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;Note&lt;/td&gt;&lt;td&gt;&lt;input type="text" name="customerNote" size="30"&gt;&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;&lt;/td&gt;
  &lt;td&gt;&lt;input type="submit"&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;
&lt;/form&gt;

&lt;%}else{%&gt;
  &lt;h3&gt;You do not have permission to view this page. ("PARTYMGR_VIEW" or "PARTYMGR_ADMIN" needed)&lt;/h3&gt;
&lt;%}%&gt;
&gt;=============================================================================

  这个程序很容易理解，需要注意的是每个文本框的名字，要跟 Schema StudyCustomer 的各
个段一致，以使程序中跟容易处理。

 3.showofbiz.jsp
&gt;=============================================================================

&lt;%@ taglib uri="ofbizTags" prefix="ofbiz" %&gt;

&lt;%@ page import="java.util.*, org.ofbiz.core.service.ModelService" %&gt;
&lt;%@ page import="org.ofbiz.core.util.*, org.ofbiz.core.pseudotag.*" %&gt;
&lt;%@ page import="org.ofbiz.core.entity.*" %&gt;
&lt;jsp:useBean id="security" type="org.ofbiz.core.security.Security" scope="request" /&gt;
&lt;jsp:useBean id="delegator" type="org.ofbiz.core.entity.GenericDelegator" scope="request" /&gt;
&lt;%if(security.hasEntityPermission("PARTYMGR", "_VIEW", session)) {%&gt;

&lt;form method="post" action="&lt;ofbiz:url&gt;/updateTest&lt;/ofbiz:url&gt;" name="updateofbiz"&gt;
&lt;table width="300" align="center"&gt;
  &lt;tr&gt;
   &lt;td&gt;Id&lt;/td&gt;&lt;td&gt;&lt;input type="text" name="customerId" size="20" value="&lt;ofbiz:entityfield attribute="edit_cust" field="customerId"/&gt;"&gt;&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;Name&lt;/td&gt;&lt;td&gt;&lt;input type="text" name="customerName" size="20" value="&lt;ofbiz:entityfield attribute="edit_cust" field="customerName"/&gt;"&gt;&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;Note&lt;/td&gt;&lt;td&gt;&lt;input type="text" name="customerNote" size="30" value="&lt;ofbiz:entityfield attribute="edit_cust" field="customerNote"/&gt;"&gt;&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;&lt;/td&gt;
   &lt;td&gt;&lt;input type="submit"&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;
&lt;/form&gt;

&lt;%}else{%&gt;
  &lt;h3&gt;You do not have permission to view this page. ("PARTYMGR_VIEW" or "PARTYMGR_ADMIN" needed)&lt;/h3&gt;
&lt;%}%&gt;

&gt;=============================================================================

  这个程序中，主要是通过
  &lt;ofbiz:entityfield attribute="edit_cust" field="customerId"/&gt;
  把取到的对象的段显示出来, 对象 edit_cust 是我们在程序中取到并放到 session 中的。

下面我们来配置 controller.xml 和 regions.xml, 在 controller.xml 中加入:
&gt;=============================================================================

   &lt;request-map uri="createTestForm"&gt;
      &lt;description&gt;Show the create form&lt;/description&gt;
      &lt;security https="false" auth="false"/&gt;
      &lt;response name="success" type="view" value="createTestForm"/&gt;
   &lt;/request-map&gt;

   &lt;request-map uri="testofbiz"&gt;
      &lt;description&gt;Test Ofbiz&lt;/description&gt;
      &lt;security https="false" auth="false"/&gt;
      &lt;response name="success" type="view" value="testofbiz"/&gt;
   &lt;/request-map&gt;
  
   &lt;request-map uri="listtest"&gt;
      &lt;description&gt;List all records&lt;/description&gt;
      &lt;security https="false" auth="false"/&gt;
      &lt;event type="java" path="com.geeyo.ofbiz.TestOfbiz" invoke="lookAllRecords" /&gt;
      &lt;response name="success" type="view" value="listAllTest"/&gt;
   &lt;/request-map&gt;

   &lt;request-map uri="showtest"&gt;
      &lt;description&gt;Show records&lt;/description&gt;
      &lt;security https="false" auth="false"/&gt;
      &lt;event type="java" path="com.geeyo.ofbiz.TestOfbiz" invoke="findRecord" /&gt;
      &lt;response name="success" type="view" value="showTest"/&gt;
   &lt;/request-map&gt;

   &lt;request-map uri="createTest"&gt;
       &lt;security https="true" auth="true"/&gt;
       &lt;event type="java" path="com.geeyo.ofbiz.TestOfbiz" invoke="createNewRecord"/&gt;
       &lt;response name="success" type="request" value="listtest"/&gt;
       &lt;response name="error" type="view" value="createTestForm"/&gt;
   &lt;/request-map&gt;

   &lt;request-map uri="updateTest"&gt;
      &lt;description&gt;update a record&lt;/description&gt;
      &lt;security https="false" auth="false"/&gt;
      &lt;event type="java" path="com.geeyo.ofbiz.TestOfbiz" invoke="updateRecord" /&gt;
      &lt;response name="success" type="request" value="listtest"/&gt;
   &lt;/request-map&gt;

   &lt;request-map uri="removetest"&gt;
      &lt;description&gt;remove a record&lt;/description&gt;
      &lt;security https="false" auth="false"/&gt;
      &lt;event type="java" path="com.geeyo.ofbiz.TestOfbiz" invoke="removeRecord" /&gt;
      &lt;response name="success" type="request" value="listtest"/&gt;
   &lt;/request-map&gt;

   &lt;view-map name="listAllTest" type="region"/&gt;
   &lt;view-map name="createTestForm" type="region"/&gt;
   &lt;view-map name="showTest" type="region"/&gt;
&gt;=============================================================================

  在 regions.xml 中加入：
&gt;=============================================================================
   &lt;define id='createTestForm' region='MAIN_REGION'&gt;
       &lt;put section='title'&gt;Create Ofbiz&lt;/put&gt;
       &lt;put section='content' content='/party/createofbiz.jsp'/&gt;
   &lt;/define&gt;

   &lt;define id='listAllTest' region='MAIN_REGION'&gt;
       &lt;put section='title'&gt;List Ofbiz&lt;/put&gt;
       &lt;put section='content' content='/party/listofbiz.jsp'/&gt;
   &lt;/define&gt;

   &lt;define id='showTest' region='MAIN_REGION'&gt;
       &lt;put section='title'&gt;Show Ofbiz&lt;/put&gt;
       &lt;put section='content' content='/party/showofbiz.jsp'/&gt;
   &lt;/define&gt;

&gt;=============================================================================

  现在就完成了，我们重新启动 Ofbiz，然后用 IE 访问：
  http://localhost:8080/partymgr/control/listtest，用admin/ofbiz 登录后就可以
看到我们刚才的工作成果了，你现在可以增加/删除/修改记录。


6.Ofbiz 通过 XML 来完成数据库操作（非常强大的功能）

  这是 Ofbiz 的一个非常强大的功能，可能通过简单的 XML 文件来完成数据增/删/改的处理，
这些处理在数据库应用中是非常多的，因为很多需要维护的数据，所以写程序也是最花时间的，
Ofbiz 把这些操作通过 XML 来完成，不能不说是一大革命---使我们不用写程序就可以完成大
部分处理，这是每个程序员都向往的终极目标。

  我们下面举例来讲述一下，处理的数据还是利用我们前面创建的 StudyCustomer，使用 XML
配置文件来完成前面程序 TestOfbiz.java 的大部分操作。

  在 c:\ofbiz\ofbiz\testOfbiz\com\geeyo\ofbiz 目录下创建文件 TestOfbizServices.xml，
该文件的内容如下：

&gt;=================================================================

&lt;?xml version="1.0" encoding="UTF-8" ?&gt;
&lt;!DOCTYPE simple-methods PUBLIC "-//OFBiz//DTD Simple Methods//EN" "http://www.ofbiz.org/dtds/simple-methods.dtd"&gt;

&lt;simple-methods&gt;

   &lt;!-- TestOfbiz methods --&gt;
   &lt;simple-method method-name="createNewRecord" short-description="Create a new record"&gt;
       &lt;check-permission permission="STUDYCUSTOMER" action="_CREATE"&gt;&lt;fail-message message="Security Error: to run createRecord you must have the STUDYCUSTOMER_CREATE permission"/&gt;&lt;/check-permission&gt;        &lt;check-errors/&gt;

       &lt;make-value entity-name="StudyCustomer" value-name="newEntity"/&gt;
       &lt;set-pk-fields map-name="parameters" value-name="newEntity"/&gt;
       &lt;set-nonpk-fields map-name="parameters" value-name="newEntity"/&gt;

       &lt;create-value value-name="newEntity"/&gt;
   &lt;/simple-method&gt;
   &lt;simple-method method-name="updateRecord" short-description="Update a record"&gt;
       &lt;check-permission permission="STUDYCUSTOMER" action="_UPDATE"&gt;&lt;fail-message message="Security Error: to run updateRecord you must have the STUDYCUSTOMER_UPDATE permission"/&gt;&lt;/check-permission&gt;

       &lt;check-errors/&gt;

       &lt;make-value entity-name="StudyCustomer" value-name="lookupPKMap"/&gt;
       &lt;set-pk-fields map-name="parameters" value-name="lookupPKMap"/&gt;
       &lt;find-by-primary-key entity-name="StudyCustomer" map-name="lookupPKMap" value-name="lookedUpValue"/&gt;
       &lt;set-nonpk-fields map-name="parameters" value-name="lookedUpValue"/&gt;
       
       &lt;store-value value-name="lookedUpValue"/&gt;
   &lt;/simple-method&gt;

   &lt;simple-method method-name="findRecord" short-description="lookup a record"&gt;
       &lt;check-errors/&gt;

       &lt;make-value entity-name="StudyCustomer" value-name="lookupPKMap"/&gt;
       &lt;set-pk-fields map-name="parameters" value-name="lookupPKMap"/&gt;
       &lt;find-by-primary-key entity-name="StudyCustomer" map-name="lookupPKMap" value-name="edit_cust"/&gt;
		 &lt;field-to-session field-name="edit_cust"/&gt;
   &lt;/simple-method&gt;

   &lt;simple-method method-name="removeRecord" short-description="Delete a record"&gt;
       &lt;check-permission permission="STUDYCUSTOMER" action="_DELETE"&gt;&lt;fail-message message="Security Error: to run deleteRecord you must have the STUDYCUSTOMER_DELETE permission"/&gt;&lt;/check-permission&gt;
       &lt;check-errors/&gt;

       &lt;make-value entity-name="StudyCustomer" value-name="lookupPKMap"/&gt;
       &lt;set-pk-fields map-name="parameters" value-name="lookupPKMap"/&gt;
       &lt;find-by-primary-key entity-name="StudyCustomer" map-name="lookupPKMap" value-name="lookedUpValue"/&gt;
       &lt;remove-value value-name="lookedUpValue"/&gt;
   &lt;/simple-method&gt;

   &lt;simple-method method-name="lookAllRecords" short-description="lookup suitable records"&gt;
       &lt;check-errors/&gt;
       &lt;find-by-and entity-name="StudyCustomer" list-name="search_results"/&gt;
		 &lt;field-to-session field-name="search_results"/&gt;
   &lt;/simple-method&gt;
   
&lt;/simple-methods&gt;


&gt;=================================================================

 上面的 XML 基本是不用解释的，定义了

  createNewRecord
  updateRecord
  lookAllRecords
  removeRecord
  findRecord

  这几个方法，而且都有对用户权限的检查，这几个方法对应于前面 TestOfbiz.java 中的几个方法，
这样来做数据库操作显然比用 Java 程序写要简单得多，

  下面还需要在 controller.xml（具体文件得位置请参照前面的教程）更改一下 mapping 的设置，
更改如下，以前使用 TestOfbiz.java 时的配置我以注释的方式保留着以做参照：

&gt;=================================================================

   &lt;request-map uri="createTestForm"&gt;
      &lt;description&gt;Show the create form&lt;/description&gt;
      &lt;security https="false" auth="false"/&gt;
      &lt;response name="success" type="view" value="createTestForm"/&gt;
   &lt;/request-map&gt;

   &lt;request-map uri="listtest"&gt;
      &lt;description&gt;List all records&lt;/description&gt;
      &lt;security https="false" auth="false"/&gt;
         &lt;event type="simple" path="com/geeyo/ofbiz/TestOfbizServices.xml" invoke="lookAllRecords" /&gt;
      &lt;response name="success" type="view" value="listAllTest"/&gt;
   &lt;/request-map&gt;

   &lt;request-map uri="showtest"&gt;
      &lt;description&gt;Show records&lt;/description&gt;
      &lt;security https="false" auth="false"/&gt;
         &lt;event type="simple" path="com/geeyo/ofbiz/TestOfbizServices.xml" invoke="findRecord" /&gt;
      &lt;response name="success" type="view" value="showTest"/&gt;
   &lt;/request-map&gt;

   &lt;request-map uri="createTest"&gt;
       &lt;security https="true" auth="true"/&gt;
       &lt;event type="simple" path="com/geeyo/ofbiz/TestOfbizServices.xml" invoke="createNewRecord"/&gt;
       &lt;response name="success" type="request" value="listtest"/&gt;
       &lt;response name="error" type="view" value="createTestForm"/&gt;
   &lt;/request-map&gt;

   &lt;request-map uri="updateTest"&gt;
      &lt;description&gt;update a record&lt;/description&gt;
      &lt;security https="false" auth="false"/&gt;
      &lt;event type="simple" path="com/geeyo/ofbiz/TestOfbizServices.xml" invoke="updateRecord" /&gt;
      &lt;response name="success" type="request" value="listtest"/&gt;
   &lt;/request-map&gt;

   &lt;request-map uri="removetest"&gt;
      &lt;description&gt;remove a record&lt;/description&gt;
      &lt;security https="false" auth="false"/&gt;
      &lt;event type="simple" path="com/geeyo/ofbiz/TestOfbizServices.xml" invoke="removeRecord" /&gt;
      &lt;response name="success" type="request" value="listtest"/&gt;
   &lt;/request-map&gt;

   &lt;view-map name="listAllTest" type="region"/&gt;
   &lt;view-map name="createTestForm" type="region"/&gt;
   &lt;view-map name="testofbiz" type="region"/&gt;
   &lt;view-map name="showTest" type="region"/&gt;

&gt;=================================================================

  配置该文件的方法请参照前面的教程，regions.xml 不需改动。

  配置完后请用前面讲过的方法访问 URL: http://localhost:8080/partymgr/control/listtest

  现在我们可以看到，Ofbiz 在 MVC 方面做得非常好，我们可以把后端的处理程序从 java 改
成用 XMl 控制，而其他部分（像 JSP）不需任何改动，这可以保证我们系统各部分的独立性。
</pre>
<img src ="http://www.blogjava.net/liaojiyong/aggbug/63638.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liaojiyong/" target="_blank">liaojiyong</a> 2006-08-15 11:25 <a href="http://www.blogjava.net/liaojiyong/archive/2006/08/15/63638.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>