Jdon框架接龙贴

为共同将中国开源软件介绍到英语世界,现特开Jdon框架翻译贴,大家有时间翻译多少是多少,但是不要重复,谢谢大家,下面先贴一部分:

快速配置指南

Jdon框架通过配置文件简单配置,可以实现在代码中进行统一的调用,如下:

TestService testService = (TestService) WebAppUtil.getService("testService ", request);

本章总结一下如何在jdonframework.xml这样配置文件中配置testService这样可供代码直接调用的类。
我们将供客户端(如Servlet/Jsp/Action)调用的类称为服务类;类分两种性质:普通的Java类或JavaBeans统称为POJO;符合EJB规范的类统称为EJB,无论POJO或EJB都可以作为服务类。从另外一个角度说:服务类配置分两种:POJO服务配置和EJB服务配置,分别使用pojoService和ejbService来配置。

普通类服务配置
使用pojoService配置项,有两个基本项:name和class,class中写全POJO的全名;name是供代码中调用这个服务的名称,一般可以写成类似对象名。本章节案例见源码案例JdonFrameworkEJB项目或Training目录下Ioc项目。


<!-- 普通Java类配置 或称POJO -->
<pojoService name="testService" class="com.jdon.framework.test.service.TestServicePOJOImp"/>


普通类配置
不是所有的普通类都直接服务于客户端(Jsp/Servlet),也就是不直接由Jsp/Servlet或表现层框架调用,而是被服务类调用,是为服务类服务的,这些类我们称为组件类。使用配置项component标明。注:在EJB架构中,组件类由EJB容器管理,所以不必在JdonFramework中配置。
最普通的配置类似服务配置如下:


<!-- jdbcDAO是被TestServiceImp调用的,是为其服务的。 -->
<component class="com.jdon.framework.test.dao.JdbcDAO" name="jdbcDAO"/>

我们经常遇到一些类中需要一些常量或参数定义,那么可以使用如下配置:


<component class="com.jdon.framework.test.dao.JdbcDAO" name="jdbcDAO">
<constructor value=
"java:/TestDS"/>
</ component >

这时,要求JdbcDAO构造参数有一个字符串和参数,这样constructor的值java:/TestDS就在JdbcDAO被调用时注射到它的实例中。
通过常数定义,我们可以充分利用XML定义来定义业务,例如,我们可以通过在jdonframework.xml中定义邮件格式,邮件和内容可能经常根据客户要求修改,如果邮件格式内容直接定义在代码中,就产生HardCode硬编码现象,而采取如下配置则可以灵活对付这样应用。

<component name="emailDefine"
class=
"com.jdon.jivejdon.service.imp.account.EmailDefine">
<constructor value=
"J道:用户名和密码"/>
<constructor value=
"您好:您索要的jdon.com网站登陆用户和密码如下:"/>
<constructor value=
"Jdon.com --- 解惑授道 专业的解决之道"/>
<constructor value=
"Jdon.com"/>
<constructor value=
"admin@jdon.com"/>
</component>
占位 这也是框架的推广啊 学习中

EJB服务配置
如果你不准备使用EJB架构,可以不使用这些配置,当然,如果你的POJO架构需要应付巨量访问,使用EJB集群分布式计算能力,那么就需要使用下面配置平滑升级到EJB。
EJB配置分为EJB2以前版本和EJB3两部分,EJB2的配置又分为Local和Remote两种配置方式。
EJB2 Local
EJB2 Local Session Bean作为服务供客户端(Servlet/Jsp)调用的配置:

<ejbService name="testService" >
<jndi name=
"TestEJB" />
<ejbLocalObject class=
"com.jdon.framework.test.ejb.TestEJBLocal"/>
</ejbService>

如上,主要有两项jndi和ejbLocalObject配置,jndi是Session Bean的JNDI名称,ejbLocalObject是Session Bean的本地接口名称,也就是继承EJBLocalObject接口那个接口。
以上配置适合代码调用时使用EJBLocalObject(TestEJBLocal)调用,如下:

TestEJBLocal testService = (TestEJBLocal) WebAppUtil.getService("testService ", request);

TestEJBLocal是一个EJBLocal性质接口,如果希望客户端(Jsp/Servlet)以普通接口来调用EJB,也就是如下:

TestService testService = (TestService) WebAppUtil.getService("testService ", request);

那么,配置中加入interface一个配置项,如下:


<ejbService name="testService" >
<jndi name=
"TestEJB" />
<ejbLocalObject class=
"com.jdon.framework.test.ejb.TestEJBLocal"/>
<interface class=
"com.jdon.framework.test.service.TestService" /> <!—增加普通接口 -->
</ejbService>

上面配置还适合POJO架构过渡到EJB架构,在以前POJO也就是普通类JavaBeans的架构中,客户端(Jsp/Servlet)中代码使用的是如下配置进行:

TestService testService = (TestService) WebAppUtil.getService("testService ", request);

那么,升级到EJB架构后,如果不希望这些客户端代码进行任何变动,那么就使用上面ejbService配置。

EJB2 Remote
EJB2的Remote Session Bean作为服务配置如下:


<ejbService name="testService" >
<jndi name=
"TestEJB" />
<ejbHomeObject class=
"com.jdon.framework.test.ejb.TestEJBHome"/>
<ejbRemoteObject class=
"com.jdon.framework.test.ejb.TestEJBRemote"/>
<interface class=
"com.jdon.framework.test.service.TestService" />
</ejbService>

ejbHomeObject和ejbRemoteObject就是EJB2 Remote的两个Home和Remote接口,具体可参考案例源码中JdonFrameworkEJB。

EJB3 配置
EJB3简化了EJB2,去除了Local和Home等接口,因此在JdonFramework..xml中配置服务就非常简单,类似POJO普通服务配置,当然会多一个JNDI。


<ejbService name="calculator" >
<jndi name=
"CalculatorEJB3" />
<interface class=
"com.jdon.framework.test.service.Calculator" />
</ejbService>

其中接口interface是普通业务接口类。参考JdonFrameworkEJB源码案例。

基本配置总揽


<!-- POJO -->
<pojoService name="testService2" class="com.jdon.framework.test.service.TestServicePOJOImp"/>
<pojoService class=
"com.jdon.framework.test.dao.JdbcDAO" name="jdbcDAO">
<!-- for jboss database JNDI -->
<constructor value=
"java:/TestDS"/>
<!-- for weblogic 8.1 database JNDI
<constructor value=
"TestDS"/>
-->
</pojoService>

<!-- EJB3 config -->
<ejbService name=
"calculator" >
<jndi name=
"CalculatorEJB3" />
<interface class=
"com.jdon.framework.test.service.Calculator" />
</ejbService>

<!-- EJB2 config
<ejbService name=
"testService" >
<jndi name=
"TestEJB" />
<ejbLocalObject class=
"com.jdon.framework.test.ejb.TestEJBLocal"/>
<interface class=
"com.jdon.framework.test.service.TestService" />
</ejbService>
-->

<!-- EJB2 remote -->
<ejbService name=
"testService" >
<jndi name=
"TestEJB" />
<ejbHomeObject class=
"com.jdon.framework.test.ejb.TestEJBHome"/>
<ejbRemoteObject class=
"com.jdon.framework.test.ejb.TestEJBRemote"/>
<interface class=
"com.jdon.framework.test.service.TestService" />
</ejbService>
-->
Configuration quick guide

With a few lines of configuration, JDon Framework can be easly entegrated into your application. Here is an example:

TestService testService = (TestService) WebAppUtil.getService("testService ", request);

In this article, I am going to show you how to get job done within jdonframework.xml for class testService.


We called the class invoked by client (Servlet/Jsp/Action) as service class. There are two types of service class. One is common java class or JavaBeans, all of which called POJO. The other is EJB-regulation-complied classes which could be simply called EJB. Any of these two type class could be used as service class, hence there will be two corresponding service configurations for POJO and EJB done by proService and jbService respectively.

Common service class configuration

There are two basic properties in pojoService, name and class. Property class is for putting POJO’s full name. Property Name is used to put the actual service name invoked in the program, conventionally written as similarly to the class name. Please see the source code in JdonFrameworkEJB or Ioc under Traning directory.



Common class configuration

Not all of classes are servered for the client directly (jsp/Servlet), that is to say some classes are not invoked by jsp/servlet or presentation frame layer, but invoked by service classes, these kinds of class we called component class annotated as component in configuration file. Note: in EJB framework, component class is managed by EJB container, so you do not need to any configuration in JdonFramework any more.

Here is a common example.

We often need to define some constants and parameters in some classes, so we can do like this:

As you can see, JdbcDao’s constructor has a string parameter. When you initialize an instance of JdbcDao, String “java:/TestDs” will be passed into constructor automatically.

By taking advantage of good point above, we can conveniently utilize xml file to define business logic. For example, we can defined the email format in jdonframework.xml so that email content could be altered easily according the customers’ needs. It is much better and flexible than get this information hard coded in the program.

Here is an example:

class="com.jdon.jivejdon.service.imp.account.EmailDefine">

多谢jegg和kylix_xp(已经邮件收到你的翻译谢谢),下面是又一部分:
初次使用Jdon框架时,需要在你的项目应用中启动它,因为Jdon框架快速开发功能目前时建立在Struts 1.2基础上,所以,如果你使用这部分功能,就需要使用Struts的InitPlugIn来启动你的项目配置文件jdonframework.xml。

启动应用服务组件配置
目前Jdon框架中整合了Struts前台表现层技术,因此可以通过Struts的Plugin实现jdonframework.xml启动,这样做的好处,可以实现Struts多模块开发,一个Struts项目中可能有多个功能模块,每个功能模块涉及从页面表现(struts配置和tiles配置)、模型设计以及后台持久化等横向一系列组件,Jdon框架通过Plugin启动jdonframework.xml可以支持这种多模块开发方式。

配置方式1:
Jdon框架已经提供一个Plugin缺省实现子类:com.jdon.strutsutil. InitPlugIn,你可以根据自己要求实现自己的Plugin实现子类。在struts-config.xml(或其它struts模块配置文件如struts-config-admin.xml等等)中配置Plugin实现子类:


<plug-in className="com.jdon.strutsutil.InitPlugIn">
<set-property property=
"modelmapping-config" value="jdonframework.xml" />
</plug-in>

InitPlugIn主要实现从struts-config.xml中读取modelmapping-config的值,modelmapping-config的值是你自己定义的jdonframework应用配置文件。
文件名不一定是jdonframework.xml,可以任意指定,例如news.jdonframework.xml表示jdonframework.xml在包名news下, com.jdon.app.myframework.xml表示myframework.xml在包名com.jdon.app下。
配置文件jdonframework.xml的位置一般是要求放置在系统的ClassPath,例如可以放置在自己项目的WEB-INF/classess目录下。
多个jdonframework.xml也可以配置,如下:


<plug-in className="com.jdon.strutsutil.InitPlugIn">
<set-property property=
"modelmapping-config" value="com.jdon.framework.test.model.models.xml,com.jdon.framework.test.service.services.xml,com.jdon.framework.test.dao.dao.xml" />
</plug-in>

多个jdonframework.xml也可以分别配置在各自的struts-config.xml中。
配置方式2:
如果你不使用Struts,可以通过web.xml下列配置来启动Jdon框架。


<context-param>
<param-name> modelmapping-config </param-name>
<param-value> jdonframework.xml </param-value>
</context-param>
……
<listener>
<listener-class>com.jdon.container.startup.ServletContainerListener</listener-class>
</listener>

上述param-value可以配置多个配置,中间以逗号隔开,如下:


<context-param>
<param-name>modelmapping-config </param-name>
<param-value>com.jdon.framework.test.model.models.xml,
com.jdon.framework.test.service.services.xml,
com.jdon.framework.test.dao.dao.xml</param-value>
</context-param>

注意,如果你不使用Struts,那么jdonframework.xml配置文件中的models部分配置就无效,只有services部分有效,services部分是配置组件容器的,services也可以认为是components同义。
本章节是每个项目必须的步骤。
启动自定义框架本身组件
本步骤不是每个项目必须的。
Jdon框架启动时将使用jdonframework.jar中META-INF目录下缺省的container.xml和aspect.xml。如果你需要拓展Jdon框架,如自己开发了一些小零碎组件,如计算公式、报表组件等或者行业软件的一些通用功能,这些组件可能需要启动时就载入,或者希望它们实现可配置可替换,那么就将它们整合入Jdon框架中,有两种加入自己配置的方式(该步骤不是必需的):
第一.定义自己的组件配置文件和拦截器组件配置,文件名必须为mycontainer.xml和myaspect.xml,这两个文件必须放置在系统的classpath路径中,或者必须在你自己的jar包,这个jar包可以和Jdon框架jar包一起部署。
第二.可以在应用系统的web.xml中定义,可以在web.xml中加入自己定义这两种配置:


<context-param>
<param-name>containerConfigure</param-name>
<param-value>WEB-INF/mycontainer.xml</param-value>
</context-param>
……
<context-param>
<param-name>aspectConfigure</param-name>
<param-value>WEB-INF/myaspect.xml</param-value>
</context-param>

那么你的mycontainer.xml和myaspect.xml必须放置在Web项目的WEB-INF目录下,当然这两个文件名可以自己任意取名。
用户自己定义的配置文件中可以覆盖缺省的container.xml或aspect.xml相应的配置。只要取相同的name值就可以。

翻译的先报到, 后翻译, 免得重复.
我来翻译第3楼新贴出的文章。

请大家指正

谢谢

这是第三部分的翻译,有不对的地方请指正。

谢谢。

jegg

the power to share

When using jdon framework at first time, you need to get it started in project application, since jdon’s agail development functions are built on struts1.2, so if you want to utilize this part of function, you need to employ InitPlugIn built in Struts to start up jdonframework.xml

Configuration for starting up application service components

At present, JDon has integrated with Struts’ presentation layer, so you can start up jdonframework.xml by using plugin in struts. The advantage of doing this is that you can implement the multi-module development with struts. A struts project may contain several function modules. Every function module is got involved in several other components from web page presentation (struts configuration and tiles configuration), module design to server side persistency. Jdon can start up jdonframework.xml by using plugin in struts to support this kind of multi-modlue development.

Configuration method 1:
Jdon framework has provided a default implementing class to plugin which is com.jdon.strutsutil.IniPlugIn, you can also implement plugin by the needs of you own. In struts-config.xml (or other struts module configuration files such as struts-config-admin.xml and so on), you can configure plugin’s implementing class:

Please see the following configuration snippet.



The main purpose of InitPlugIn class is to read the modelmapping-config’s value which is the name of jdonframework configuration file defined by you.

File name could be arbitrary, for example, you can use news.jdonframework.xml to represent that jdonframework.xml is under the package news. com.jdon.app.myframework.xml is representing that myframework.xml is under the package com.jdon.app.
Usually, you can put jdonframework.xml in the web application’s class path, for example, WEB-INF/classess. (歧异)
You can configure more then one jdonfremework.xml in plugin like the following:



Also, you can set them within their struts-config.xml files respectively.

Configuration method 2
If you are not using struts, you can start up jDon framework by setting web.xml. Here is an example.


modelmapping-config
jdonframework.xml

……

com.jdon.container.startup.ServletContainerListener

Param-value in the above example could have more than one value separated by commons like the following:

modelmapping-config
com.jdon.framework.test.model.models.xml,
com.jdon.framework.test.service.services.xml,
com.jdon.framework.test.dao.dao.xml

Please note, if you are not using struts, com.jdon.framework.test.model.models.xml within para-name is invalid, yet com.jdon.framework.test.service.services.xml is still valid, which is set component container that you can also regard it as components.

Steps for very project in this chapter are mush
Starting up self-define framework component.
This step is not must for every project.

When Jon framework is starting up, it will use container.xml and aspect.xml under META-INF in jdonframework.jar by default. If you need to extend Jdon framework, for example, you have developed some small components, such as formula functions, chart components or some general functions and you need load these components as starting up, or expect them configurable and replaceable as our wish, you can integreated them into jdon. There are two ways to go. (It is not the must)
First Way :
define you own component configuration file and interceptor component configuration file, which name much be mycontainer.xml and myaspect.xml, these two files must be put in the system class path or packed in your jar file, this jar file could also be deployed together with jdon framework’s jar file

Second Way:
You can define it in web.xml in your web application, here is an example:

containerConfigure
WEB-INF/mycontainer.xml

……

aspectConfigure
WEB-INF/myaspect.xml

So your mycontainer.xml file and myaspect.xml file must be put in WEB_INF directory in your web application, yet file names could be arbitrary. In User-defined configuration file, corresponding settings in container.xml and aspect.xml could be overwritten; however the setting name should be the same.

这里发贴有点怪异,字数有限制(中文4096/2)而且有TAG的代码还贴不上去。不知道是我发的问题,还是什么其他问题,如何解决?

谢谢

很好 ,多谢,我会相关英文文档注明您的姓名。

发帖时,如果有代码,使用上面#图标特定标注一下就可以。每次发帖最多2000字,可分开贴。

下面是第三部分:

CRUD流程原理
传统的直接基于Strut CRUD实现方式:增删改查是四个操作在传统表现层中需要分四次流程,每次流程中有大部分开发或配置类似,这种低层次的重复劳动降低开发者的积极性。
Jdon框架抽象出传统增删改查四个流程中的共同部分,并将其配置固化,实现一定开发模式限制,从而大大提高开发效率。具体设计原理如下:
(1)一般情况下,一个系统的操作用户(以下简称用户)新增或修改数据,首先要推送给他一个Jsp页面,如果是新增页面,就是一个空白表单的Jsp页面;如果是修改页面,则先到数据库中查询获得原来的数据,然后推出一个有数据表单的Jsp页面,用户才能在原来的数据上修改或编辑。
由于在MVC模式中,Jsp页面只是一个页面输出,或者说不能有任何Java功能实现,因此上面修改页面推出前需要查询数据库这个需要Java实现的功能不能在Jsp页面中实现,只能在Jsp页面前加一个Action,这样,修改页面的推出流程变为不是直接调用Jsp页面,而是:action.do ---> Jsp页面,首先调用Action;然后才由Action推出Jsp页面。
这个Action实现我们称为ViewAction,专门用于控制输出Jsp界面,新增Jsp页面的推出前我们也加上这个ViewAction,这样无论是新增Jsp页面或修改Jsp页面,都是由ViewAction推出,那么到底是推出新增Jsp页面还是修改Jsp页面呢?
关键是ViewAction的输入参数Action的值,根据Action的值来判断是新增还是修改。如果设置Action值如为空或为create值(如http://xxx/viewAction.do?action=create),则直接输出新增性质的JSP页面;而Action值如为edit(如http://xxx/viewAction.do?action=edit),则是要求输出进行编辑页面,根据ID查询数据库获得存在的数据,然后输出编辑修改性质的JSP页面。
当然,在ViewAction中还有一些具体参数的检查,如果是编辑,则关键字ID不能为空,因为后台要根据此ID为主键,查询数据库其相应的记录,如果数据库未查询到该主键的记录,则需要显示无此记录等信息。
(2)创建有关该数据的JSP页面,既用于新增页面,也用于修改页面。将该Jsp页面作为ViewAction的输出页面。该Jsp页面结构如下:


<html:form action=”/XXXSaveAction.do”>
<html:hidden property="action" />
<!—该action的值是调用viewAction.do?action参数的值 -->
…….
</html:form>

当用户填写完该Jsp页面中的表单数据将提交给一个新Action子类实现:专门用于接受表单数据并保存持久化它们。
(3) 创建SaveAction,它用来接受提交表单的数据,不同于ViewAction专门用于输出Jsp表单页面,该Action专门用于接受Jsp表单页面提交的数据。
SaveAction中主要是调用业务层Service实现数据持久化操作,调用Service之前,需要将表单的数据ActionForm转为一个对象(DTO对象),然后作为方法参数传送给Service具体方法, Service处理完成后,返回结果对象,SaveAction还需要检查Service是否操作成功等。
一个数据的增删改查流程有上面总结的流程组成:
ViewAction -? 表单Jsp 页面 -? SaveAction --? 结果Jsp页面
一个数据新增删除修改流程需要创建两个Action,一个Jsp页面;当然Struts 1.2中已经通过DispatchAction解决了需要创建两个Action问题,但是还是需要Action编码,而Jdon框架提供了Struts缺省Action实现(也就是ViewAction 和SaveAction 代码实现),就不需要另外Action编码,只要直接进行strus-config.xml配置即可。
Model和ModelForm
Model是域模型,是采取领域模型分析法从系统需求分析中获得的,反映了应用系统的本质,Model是一个简单的POJO,属于数据类型的POJO,区别于POJO服务。从传统意义上理解,Model设计相当数据表设计,在传统的过程化编程中,一个数据库信息系统设计之前我们总是从数据表设计开始,而现在我们提倡是从域模型提炼开始。
Jdon框架对模型对象建立有两个要求,继承com.jdon.controller.model.Model,每个Model有一个主键。
每个Model需要一个主键
每个Model必须有一个主键,就如同每个数据表设计都有主键一样,Model的主键是和其对应的数据表主键在类型上是一致的。例如一个Model为Account如下:

public class Account extends Model {

private String username;
private String password;
private String email;
private String firstName;
private String lastName;
……

}

其持久化数据表account的表结构:

CREATE TABLE ACCOUNT (
username varchar(80) NOT NULL default '',
email varchar(80) NOT NULL default '',
……
PRIMARY KEY (username)
}

account表的主键是username,数据类型是varchar,通过JDBC对应可知其对应的Java类型是String,那么Account模型的主键也必须是String,当然主键名称可以不一样,Account是username,而account的表的主键可以是userId。下面以MySQL为例,说明JDBC缺省在对象和数据表之间的类型对应:

Model主键类型 数据表主键类型
String varchar或char
Integer int
Long BIGINT

主键类型(包括Model和数据表)一般推荐统一使用String 或Integer/int或Long/long。缺省建议使用String(Oracle数据库处理字符串中空格有些麻烦,需要特别注意)。下载案例包中SimpleJdonFrameworkTest主键是使用String类型,而simpleMessage案例包主键类型是Long类型。
注意:模型类中一定要提供主键的setter和getter方法,Jdon框架内部是根据主键的getter方法返回类型察知主键的类型。
如果你的数据表没有主键怎么办?那么强制给它一个主键,这可以由一个专门序列器产生。
在使用本框架前提下,数据表字段不同类型选择所带来的性能等差异非常小,几乎忽略不计。相关数据类型讨论可见:http://www.jdon.com/jive/article.jsp?forum=91&thread=23875

Model或ModelIF
Jdon框架提供的com.jdon.controller.model.Model是一个抽象类,这需要你的Domain Model继承这个抽象类,由于Java的单继承特点,有可能使你的Domain Model类再不能继承其他抽象类,为此,在Jdon框架1.4版本以后,提供了com.jdon.controller.model.ModelIF接口,与Model稍微不同的是,当你和Jdon框架互动时(继承Jdon框架一些类),这时需要注意Model还是ModelIF,Jdon框架1.4以后,都提供Model和ModelIF的支持。
本说明书中谈到Model对象,也同时意指ModelIF。

Model配置
Model在jdonframework.xml中配置,如下:

<model key="username" class ="com.jdon.framework.samples.jpetstore.domain.Account">
…..
</model>

key的值就是指定Model的主键,这里是username,class是Account的类,这样就定义了一个Model。
Model配置除定义Model自身属性以外,还需要定义了子属性:actionForm和handler,这两个定义在下面章节描述。

ModelForm是Model的映射
Jdon框架通过映射设计,保证表现层、Jdon框架、服务层和持久层之间能够解耦独立,相互可插拔、脱离或组合。
ModelForm相当于Struts的ActionForm,属于界面对象,使用Jdon框架一个要求是:ModelForm的内容(字段/方法)需要大于等于Model的内容,这样,才能将表现层的数据传送到Model业务层处理,ModelForm内容可以多于Model内容,这些多余内容可能只与界面有关,不涉及业务逻辑。
Model和ModelForm映射是通过相同字段拷贝实现的,也就是这两个类之间有相同的字段属性,那么字段属性的值可以在他们之间拷贝转移。例如Model Account的代码:


public class Account extends Model {

private String username;
private String password;
private String email;
private String firstName;
private String lastName;
……

}

那么其ModelForm的类代码如下:

public class AccountForm extends ModelForm {

private String username;
private String password;
private String email;
private String firstName;
private String lastName;
……

}

这样两者代码保证它们之间的映射,这是使用Jdon框架的规则之一。
Jdon框架是使用org.apache.commons.beanutils.PropertyUtils.copyProperties方法在这两个类的对象之间进行字段拷贝的,因此两个类对应字段类型必须一致。
ModelForm配置
ModelForm就是ActionForm,因此只需要在struts-config.xml的中定义ActionForm就可以,如下:

<struts-config>
<form-beans>
<form-bean name="accountFrom"
type=
"com.jdon.framework.samples.jpetstore.presentation.form.AccountForm"/>
</form-beans>
</struts-config>

注意ModelForm的名字是accountFrom,因为Model和ModelForm是映射对应关系,我们需要告诉Jdon框架这种对应关系。
那么,拓展前面的Model配置,在jdonframework.xml配置如下:

<model key="username" class ="com.jdon.framework.samples.jpetstore.domain.Account">
<actionForm name=
"accountForm"/>
……
</model>

在jdonframework.xml中的配置是让Model和ModelForm有唯一的对应关系。
在jdonframework.xml中配置的ActionForm名称必须是全局唯一的,也就是说,如果有两个ActionForm名称一样的配置,就是它们的Model class值不一样,Jdon框架也视为是一样的。
CRUD基本流程
这里首先介绍一下Jdon框架在上面思路上延伸抽象设计的思路:
一个数据的增删改查流程有上面总结的流程组成:
ViewAction -? 表单Jsp 页面 -? SaveAction --? 结果Jsp页面
如下面流程图:通过浏览器网址(或Html链接)调用我们推出用于新增或编辑的页面,确定保存输入的数据后,激活ModelSaveAction,ModelSaveAction通过jdonframework.xml的配置,调用相应的Service类,这个Service类是你自己编制的,根据原始网址或Html链接调用的参数action不一样,调用不同的Service接口中相应的方法
这页出现了横向滚动条,是因为PRE标签里的文本过长导致的,

在IE里可以这样解决:
修改jivejdon.css,加入


pre { width: 800px; overflow: hidden; word-wrap: break-word }

即可。

这样比较适合1024*768分辨率的用户,限定宽度800像素是折中的办法,好一点的办法是不用pre。以更好的实现自适应宽度,自动换行。或者将表格指定参数table-layout: fixed;,但这样需要修改的地方较多。有些用%定义的宽度必须改为绝对宽度。

其他浏览器可参考:
http://blog.toaspx.com/1.html

因为现版本加入了google广告栏,
pre { width: 800px; overflow: hidden; word-wrap: break-word }
改为
pre { width: 690px; overflow: hidden; word-wrap: break-word }
会取得更好效果:〉