官方要理解dwr.xml
假如我在项目的BUS
前面我们提到,DWR讲到这里,我们现在重新回到dwr.xmlcreate creator="spring" javascript="DepartmentBus" scope="script">
<param name="beanName" value="departmentBus"/>
create>
Creator包中找到一个的文件。在该文件下的中可以看到。
是用于你在中调用这个对象时使用什么名称,强烈建议你使用首字母大写,这样在页面中很容易看出这是一个与后台对应的对象。如果你使用了并且在中选择了,那么你需要一个叫的参数,而其值就是在配置文件中配置的,如。另外个非常有用的参数是和,可以禁止页面调用后台的某个或某些方法,具体的写法是在中加入:exclude method="createDepartment"/>
method部分写的是这些方法不带括号的方法名,如果有多个就写多行;则规定页面只能调用某些方法。
在dwr.xmlconvert match="com.htxx.demo.datasource1.model.Department"
javascript="Department" converter="hibernate3"/>
match用于告诉
如果你使用后一种方法去批量注册对象,那么你就不能这样初始化这个对象而只能这样手动注册:
Var dep = {departmentId:null, departmentName:null, ……};
我推荐大家采用第一种方法的好处可以在我后面写的《DWR帮助说明-如何编写通用的单行编辑框DWR帮助说明-dwr的bug及其解决方法首字母大写。Converter用于告诉用什么的类来执行转换,常用的转换器有、、、等。有哪些转换器可以在的(该文件的位置见前文)中找到。我需要强调的是,如果朋友们使用了,那么你需要将需要使用的所有值对象都通过转换器注册。但是我在网上看见很多朋友都使用转换器来注册。如果你使用来转换值对象,在运行程序的时候会出现很多问题(这些问题我就不详述了),同时还会出现效率的问题,因为会将该值对象的所有属性,及其这些属性的所有属性,所有属性的属性,都以穷举的方式取出来。熟悉的朋友应当马上明白这样将是数据库操作的一个灾难。如果你使用或作为转换器将不会发生这样的事,同时,还较好地解决了延迟查询的问题,但官方建议我们使用的,这我也不再详述,不清楚的朋友可以查阅的帮助文档。但另一个问题我不得不提,在使用延迟查询的时候其实还是有问题的。譬如有一个值对象包含一个的属性,根据延迟查询的规则,在某个时,属性不会马上装载,即使执行也不会装载。必须到真正对这个操作的时候才会装载。既然如此,问题就来了,我们使用执行查询的时候,常常是真正到页面才会读取,这时已经是脱离服务器端到页面端了而不能再得到。这个问题怎么办呢,最好的办法是在服务器端就提前装载页面需要使用的属性,因为作为开发者他肯定知道哪些属性要在客户端使用,哪些属性不需要。至于如何在服务器端就提前装载,感兴趣的朋友在我的示例中看到。另外一个需要提的是,与一样,转换器也可以一样地设置和参数。但是与不同的是,它们说明在转换对象的时候需要转换或不转换某些属性。这个参数对于的一对一关联非常重要。在中一对一关联是不做延迟查询的,假如有一个值对象与值对象是一对一关联,那么中有的属性,而中有的属性。由于一对一关联不做延迟查询,当在转换一个是会装载它的属性,然后在装载的时候,又会去装载中的属性。如此这样,就会形成一个死循环,最后以堆栈溢出告终。解决这个问题的办法就是禁掉中的属性,避免产生死循环。具体写法如下:
xml 代码
- <convert match="com.htxx.demo.model.Address" javascript="Address" converter="hibernate3">
- <param name="exclude" value="employee"/>
- </convert>
Value部分是需要转换的属性,如果有多个则用逗号隔开就可以了。(一个dwr+spring+hibernate的示例)