`
fangang
  • 浏览: 877864 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
311c4c32-b171-3767-b974-d26acf661fb2
谈谈用例模型的那些事儿
浏览量:38699
767c50c5-189c-3525-a93f-5884d146ee78
一次迭代式开发的研究
浏览量:68844
03a3e133-6080-3bc8-a960-9d915ed9eabc
我们应当怎样做需求分析
浏览量:410154
753f3c56-c831-3add-ba41-b3b70d6d913f
重构,是这样干的
浏览量:91910
社区版块
存档分类
最新评论

DWR帮助说明-dwr的bug及其解决方法

    博客分类:
  • dwr
阅读更多

使用DWR开始开发项目到现在,感觉真的经历了一段很长的路,因为其间遇到了很多的问题需要解决,一点儿不顺利。这个过程差不多总是这样的:写一小段程序,一运行就出错了,是什么原因呢,看了半天错误提示,不明白。怎么办,到DWR官方网站去看看吧,也许可以解决问题。如果不能,就把错误提示粘到百度去搜索一下国内网站吧。如果还不能,就到谷歌里去搜索一下国外网站。如果这些都不行,只能用最土的办法,设断点跟源码了。可以说DWR是我所用过的目前资料最少的一个框架,也是自身问题最多的一个框架。我所遇到过的很多问题都是通过跟踪源码的方式才发现和解决问题的。现在我就把发现到并解决的问题跟大家共享一下吧。当然它们中的有些问题不一定就是DWR的事,也有hibernate的问题。

一、转换一对多值对象出现的问题

我在《DWR帮助文档-dwr.xml文件的配置》一文中提到,我们应当把在dwr中用到的所有值对象都注册到dwr.xml配置文件中。在配置值对象的时候,有2种方式:使用model.*这种通配符的方式一次性将多个值对象进行注册;使用hibernate3hibernate2的方式一个一个注册值对象。同时我也提到,使用第一种方式注册虽然简便,但存在不利于编写前端页面和性能差的问题,不推荐使用;使用第二种方式注册有利于程序的编写和性能的提高,但在dwr中存在bug。这样的bug是什么呢?我们不妨举一个实例来说明。假如在项目中存在部门和员工的值对象,并且是一对多的关系(每一个员工都只能在一个部门,但多个员工可以在用一个部门),那么hibernate在查询员工的时候会返回一个员工值对象的集合,集合中的每一个员工值对象都有一个部门属性,对应一个部门值对象,但多个员工值对象对应的可能是一个部门值对象。这个关系很清晰,也应该没有什么疑问,但在dwr将其转换为js中的对象的过程中却会发生错误。错误的提示是这样的:

  1. org.directwebremoting.extend.MarshallException: Error marshalling com.htxx.demo.model.Employee: Ignoring request to inline on reference 

    for: Object:s0:{departmentId=Simple:"001", departmentName=Simple:"\u4EBA\u529B\u8D44\u6E90\u90E8", employees=Simple:null}. See the logs for more details.   
  2.   
  3. at org.directwebremoting.convert.BasicObjectConverter.convertOutbound(BasicObjectConverter.java:200)   
  4.   
  5. at org.directwebremoting.dwrp.DefaultConverterManager.convertOutbound(DefaultConverterManager.java:192)   
  6.   
  7. ...    
  8.   
  9. Caused by: java.lang.IllegalStateException: Ignoring request to inline on reference for: Object:s0:{departmentId=Simple:"001", departmentName=Simple:"\u4EBA\u529B\u8D44\u6E90\u90E8", employees=Simple:null}   
  10.   
  11. at org.directwebremoting.dwrp.AbstractOutboundVariable.getReferenceVariable(AbstractOutboundVariable.java:148)   
  12.   
  13. at org.directwebremoting.dwrp.DefaultConverterManager.convertOutbound(DefaultConverterManager.java:181)   
  14.   
  15. at org.directwebremoting.convert.BasicObjectConverter.convertOutbound(BasicObjectConverter.java:189)   
  16.   
  17.        ... 28 more   

仔细查看和跟踪源码,我发现这个问题出在AbstractOutboundVariable类的getReferenceVariable方法中,它的源码是这样写的:

java 代码
  1. /* (non-Javadoc)  
  2.  * @see org.directwebremoting.OutboundVariable#getReference()  
  3.  */  
  4. public OutboundVariable getReferenceVariable()   
  5. {   
  6.     if (reference == null)   
  7.     {   
  8.         reference = new ReferenceOutboundVariable(getVariableName());   
  9.         if (forcedInlineStatus)   
  10.         {   
  11.             throw new IllegalStateException("Ignoring request to inline on reference for: " + this);   
  12.         }   
  13.         else  
  14.         {   
  15.             setInline(false);   
  16.         }   
  17.     }   
  18.     return reference;   
  19. }  
dwr已经使用了某个对象以后,就会将它的forcedInlineStatue置为true,当dwr再次装载这个对象的时候就会强制抛出IllegalStateException异常。这在通常情况下是没有问题的,但在我们前面提到的例子中就有问题了。当dwr转换员工值对象集合的时候,首先装载和转换了员工甲,他因为是“研发1部”所以dwr也装载了“研发1部”这个部门值对象。然后dwr开始装载和转换员工乙。由于员工乙也是“研发1部”,因此dwr又开始装载“研发1部”这个值对象,但突然发现这个值对象已经装载过了,因而就抛出了以上错误。如果我们希望整合dwrspringhibernate到一起进行项目开发,以上这个问题是怎么也不能避免的,问题是如何解决。非常遗憾的是,dwr官方似乎还没有要解决这个问题的意思,我思索再三以后决定,还是“自己动手丰衣足食”吧。解决的办法其实很简单,就是把11行这个强制抛出异常注释掉,然后重新编译。这样修改以后就再也没有出现以上问题,同时至今也没有发现其它问题出现。

二、转换一对一值对象出现的问题

这个问题我同样在《DWR帮助文档-dwr.xml文件的配置》一文中提到过,就是dwr在转换一对一值对象关系时出现死循环的问题。假如Employee值对象存在一个且最多一个Address值对象的时候,Employee有一个Address属性指向一个Address值对象,而Address值对象也同样会有一个Employee属性指向这个Employee值对象。我们知道hibernate对于一对一关联是不进行延迟加载的,所以dwr在装载和转换Employee值对象的时候会去加载它的Address值对象,然后在加载这个Address值对象的时候会又去加载那个Employee值对象。如此反复加载就形成了死循环。解决这个问题的办法就是在dwr.xml配置Address的时候,使用exclude禁用它对Employee的加载。详细说明见《DWR帮助文档-dwr.xml文件的配置》,这里就不再罗嗦了。

三、找不到值对象中set函数的问题

在使用dwr执行插入和更新操作的时候,有时会出现以下的警告:

Missing java bean property to match javascript property:[属性名]. For causes see debug level logs:

如果将log4jdwr的级别降低为DEBUG级别,你还可以在控制台中看到一下提示:

You may be missing the correct setter: setXXX()The property may be excluded using include or exclude rules.

其实你并没有在dwr中禁用这个属性,同时也正确地在值对象中编写了一个setXXX()方法的,这个问题到底出在哪里呢?我查看了dwr的源码发现,dwr是如何获得一个值对象的所有属性及其各自的getset方法呢?是采用Java的反向机制。如果你通过自己去编写或修改某个属性及其它的getset方法,而不是通过工具生成,那么反向机制就可能找不到这个属性的getset方法(注意,是可能而并不总是这样)。这个问题解决的办法就是删除该属性的getset方法,然后使用MyEclipsegetset方法生成工具自动生成。

四、找不到值对象的LazyInitializer的问题

在使用dwr执行插入和更新操作的时候,有时会抛出这样一个离谱的异常:

java.lang.

  1. NoSuchMethodError: com.htxx.demo.model.Department.getHibernateLazyInitializer()Lorg/hibernate/proxy/LazyInitializer;   
  2. at com.htxx.demo.model.Department$$EnhancerByCGLIB$$f4b4f445.getHibernateLazyInitializer()   
  3. at org.directwebremoting.hibernate.H3BeanConverter.getClass(H3BeanConverter.java:139)  

之所以说这个异常比较离谱,是因为它似乎就没有dwr什么事。事实上它也是没有dwr什么事,而是hibernate出错了。查看hibernate的官方网站你可以发现这个bug的发布,并在hibernate3.2.0.rc4以后的版本这解决这个问题了。将hibernate3换成最新版本后果然就解决这个问题了。

五、执行查询时找不到hibernate查询工厂类的问题

这个还是hibernate3的问题。在执行查询的时候在控制台显示这样一个错误:

CharScanner; panic: ClassNotFoundException: org.hibernate.hql.ast.HqlToken

遇到这个问题不要怕,其实解决的方法很简单,就是在spring的配置文件ApplicationContext-hibernate.xml中,在sessionFactoryhibernateProperties属性中增加这样一段话:

xml 代码
  1. <property name="hibernateProperties">  
  2.     <props>  
  3.        ...   
  4.        <prop key="hibernate.query.factory_class">org.hibernate.hql.classic.ClassicQueryTranslatorFactoryprop>  
  5.        props>  
  6. property  

六、在JDK1.4中运行和部署DWR2hibernate3出现的问题

DWR2.0中提供了一些JDK5中才能使用的annotations的功能。然而,这个功能在JDK1.4的环境中进行启动或者部署会发生错误。抱歉的是这个错误信息我没有及时记录,日后补上。这个错误在网上可以轻易地搜索到解决方案,即在dwr.jar中删除掉org.directwebremoting.annotations.AnnotationsConfigurator这个类再重新部署就可以了。

同样的问题出现在hibernate3中,hibernate3annotations的支持在JDK1.4中也可能出现异常,解决的办法就是在部署文件中删除掉hibernate-annotations.jar就可以了。

另外值得说明的是,以上2个问题并不是每次都会出现的。它们就如同幽灵一样有时出现有时不出现,因此我们并不需要总是删除这个类和jar包,只是在发生错误时才删除。

分享到:
评论
25 楼 Philos 2007-10-10  
fangang你好
我初次接触dwr有一个问题,我在用dwr.util.getValues()时总是取不到对象,比如这样:
var object = {id:null,name:null};
dwr.util.getValues(object);
alert(boject.value);
输出的值是undefine。
谢谢。
24 楼 fangang 2007-10-05  
国庆节快乐!做一个框架不容易,需要考虑的问题真的不少。
23 楼 kaki 2007-10-04  
感谢指点,祝您国庆节快乐!

希望这个框架越来越成熟。
22 楼 fangang 2007-10-03  
kaki 写道
这个框架道路漫长,还有多表查询、更复杂的查询可能都是要面临的问题。

当然,使用数据库的视图可以解决,但是总觉得不灵活。



呵呵,还是你对hibernate理解的问题吧。为什么这么说呢?我从多表查询和复杂查询分别来分析吧。

过去我的朋友费了很多的力气去实现一个可以支持多表查询的通用查询框架,然而得到的结果是非常复杂的实现过程,最终的结果也不理想。分析原因,hibernate本身在进行多表查询的时候,整个过程就比较复杂且难于通用。实际上hibernate也不建议我们使用多表查询。从另一个角度来说,hibernate中对值对象的各种关系(一对多、多对一、一对一、多对多、3种继承)的处理已经可以实现各种多表查询需要实现的功能,因而实现多表的通用查询已经变得没有意义,只要实现建立在值对象关系上的单表查询就可以了。

也有朋友问我如何在hibernate下实现复杂的查询,我笑了,因为这并不是hiberate非常善于的领域。因为复杂查询往往会采用某种数据库特有的查询语句,或者使用大量特殊的函数,执行一些特殊的处理。虽然这些hibernate似乎可以处理,但如果你真正这样做了,你会发现不管是执行效率和易编程方面都不让人满意。所以我的建议,使用复杂查询最好不要使用hibernate。
21 楼 kaki 2007-09-30  
这个框架道路漫长,还有多表查询、更复杂的查询可能都是要面临的问题。

当然,使用数据库的视图可以解决,但是总觉得不灵活。

20 楼 fangang 2007-09-28  
在这篇文章第六部分的第一个问题中提到,DWR在JDK1.4中部署后启动时可能出错,现在补充一下错误信息:
7110 [main] FATAL org.directwebremoting.servlet.DwrServlet  - ExceptionInInitializerError. Nested exception:
java.lang.NullPointerException
        at java.util.Hashtable.get(Hashtable.java:329)
        at org.apache.commons.logging.impl.Log4jFactory.getInstance(Log4jFactory.java:136)
        at org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:257)
        at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:390)

如果你在启动项目时出现这个错误,打开dwr.jar删除以下这个类问题就解决了:
org.directwebremoting.annotations.AnnotationsConfigurator
19 楼 fangang 2007-09-26  
今天回到公司测试了一下,估计这个问题是Condition采用数组的方式来传递条件造成的,原因就是它的Object[]。
在dwr编程中特别要注意的是,不能在任何一个要调用的方法中存在Object或Object[]的参数及返回值,甚至在参数及返回值中不能存在某个属性是Object或Object[],否则会出现这个错误。我编写的Condition并不是专为dwr编写的,但在使用的时候发现采用数组的方式会出现这个错误,多亏我还有另一个方式:代理类的方式:)
18 楼 kaki 2007-09-25  
没有解决

<convert match="com.htxx.service.dao.query.*" converter="bean"></convert>    


是解决js的问题,后来的Condition是在BusImp中实现的,所以和这个是不是有冲突??

现在很想知道如何在前台方便的传递条件??
17 楼 fangang 2007-09-24  
哈哈,搞定啦?
16 楼 kaki 2007-09-24  
<convert match="com.htxx.service.dao.query.*" converter="bean"></convert>  


谢谢!
15 楼 fangang 2007-09-23  
crabboy 写道
对于问题一:
能否将一对多关联再Dao层封装好,业务层调用的是完整的list集合,javabean设计为既包括人的属性,也包括部门属性。
对于DWR来说,只知道一个javabean就可以了。
问题不是得到圆满解决了!

也许crabboy没有弄明白我提出的这个问题。正如你所说的,在设计的时候,将一对多关联在Dao层封装好,业务层调用的是完整的list集合,javabean设计为既包括人的属性,也包括部门属性。但是,dwr.xml的不同配置可以影响该问题的出现与不出现。如果dwr.xml将值对象配置为这样:
<convert match="com.htxx.demo.model.*" converter="bean"></convert>

这个问题就不会出现,因为最初dwr.xml的版本就是这样配置的,方案非常成熟,没有问题,但hibernate的许多优秀特性都不能体现出来,效率也是一个问题。
如果dwr.xml将值对象只这样配置:
<convert match="com.htxx.demo.model.Employee" javascript="Employee" converter="hibernate3"></convert>

这应当是dwr新增的功能,它能充分体现出hibernate的许多优秀特性,比如延迟加载,但还是不成熟的,存在我提到的问题,不信你可以试一试。
14 楼 crabboy 2007-09-22  
对于问题一:
能否将一对多关联再Dao层封装好,业务层调用的是完整的list集合,javabean设计为既包括人的属性,也包括部门属性。
对于DWR来说,只知道一个javabean就可以了。
问题不是得到圆满解决了!
13 楼 fangang 2007-09-21  
在dwr.xml中加上这个试试:
<convert match="com.htxx.service.dao.query.*" converter="bean"></convert>
12 楼 kaki 2007-09-20  
fangang 写道
kaki 写道
2189735 [ExecuteThread: '14' for queue: 'weblogic.kernel.Default'] WARN  org.directwebremoting.dwrp.BaseCallMarshaller  - Marshalling exception
org.directwebremoting.extend.MarshallException: Error marshalling java.lang.Object: No converter found for 'class java.lang.Object'. See the logs for more details.
	at org.directwebremoting.dwrp.DefaultConverterManager.convertInbound(DefaultConverterManager.java:147)
	at org.directwebremoting.convert.ArrayConverter.convertInbound(ArrayConverter.java:93)
	at org.directwebremoting.dwrp.DefaultConverterManager.convertInbound(DefaultConverterManager.java:159)
	at org.directwebremoting.convert.BasicObjectConverter.convertInbound(BasicObjectConverter.java:139)
	at org.directwebremoting.dwrp.DefaultConverterManager.convertInbound(DefaultConverterManager.java:159)
	at org.directwebremoting.dwrp.BaseCallMarshaller.marshallInbound(BaseCallMarshaller.java:152)
	at org.directwebremoting.servlet.PlainCallHandler.handle(PlainCallHandler.java:44)
	at org.directwebremoting.servlet.UrlProcessor.handle(UrlProcessor.java:101)
	at org.directwebremoting.servlet.DwrServlet.doPost(DwrServlet.java:120)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
	at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:1006)
	at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:419)
	at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:28)
	at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
	at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:174)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:77)
	at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
	at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:6724)
	at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
	at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121)
	at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3764)
	at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2644)
	at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:219)
	at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:178)
2189750 [ExecuteThread: '14' for queue: 'weblogic.kernel.Default'] WARN  org.directwebremoting.dwrp.BaseCallMarshaller  - --Erroring: batchId[5] message[org.directwebremoting.extend.MarshallException: Error marshalling java.lang.Object: No converter found for 'class java.lang.Object'. See the logs for more details.]


这是设计dwr常见的问题,原因是使用了Object作为函数参数,或者在dwr中转换的对象包含类型为Object的属性。前一个问题的解决方法是不要使用这样的参数,所有的参数都是某个具体类型并在dwr中注册。后一个问题的解决方法就是在dwr.xml中禁用该属性。



用的还是您的框架,问题发生的环节是在翻页的时候。

有些奇怪。
11 楼 fangang 2007-09-15  
在javaeye发短信,把你写的这段程序的jsp和bus以及dwr.xml发给我,还有错误信息,完整的。ok!
10 楼 kaki 2007-09-15  
Condition condition = new Condition(new Comparison("id",">",new Integer(300))); 


依然提示没有定义。
9 楼 kaki 2007-09-15  
有时一天过去了,还是同样的问题,没有结果。

 
8 楼 kaki 2007-09-14  
还是不行啊,痛苦。。。。

配置了也提示对象没有定义。
7 楼 fangang 2007-09-14  
dwr.xml中Comparison也要配置
6 楼 kaki 2007-09-14  
提示  Comparison 没有定义,4个js都引用了,dwr.xml 关于Condition也配置了,还是不行。

相关推荐

    dwr帮助文档

    4. **DWR的bug及其解决方法** 由于DWR不是官方文档,可能遇到的问题需要通过社区支持和源码分析来解决。Fangang的文档可能包含了一些常见问题的解决方案,这对于遇到困难的开发者来说是非常有价值的资源。 5. **...

    DWR.xml配置文件说明书(含源码)

    DWR.xml配置文件说明书 1、 建立dwr.xml 配置文件 任何一个dwr.xml的文件都需要包含DWR DOCTYPE的声明行,格式如下: &lt;!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN" ...

    s2.1.8+spring2.5.6+hiberante3.3.2+dwr2.0.6

    **DWR2.0.6** 是Direct Web Remoting的缩写,是一个JavaScript到Java的反向Ajax库,允许在浏览器端直接调用服务器上的Java方法,实现实时交互。DWR简化了前端与后端的数据交换,提高了用户体验。2.0.6版本改进了安全...

    绝好的日期控件My97DatePicker3.0.1

    修正与很多JS库(如prototype,JQuery,dwr等)的冲突问题 2.解决不能“后退”的问题 3.解决IE6中,今天和选中的日期没有以其它颜色显示的问题 4.解决日期选择器被动态增加的iframe覆盖的问题 &lt;br&gt;演示地址:...

    Pro Ajax and Java.pdf

    - **避免常见的陷阱**:为了避免开发者在实现Ajax时遇到的问题,书中还列举了一些常见的错误及其解决方案。 - **Ajax模式**:书中介绍了一些常用的Ajax模式,如Fade Anything Technique (FAT)、Auto Refresh、...

    J2EE程序员需掌握的技术

    - 单例,命令,工厂,工厂方法,观察者,模板,外观,访问者,状态,装饰器,桥接,DAO,责任链等:理解和应用设计模式。 掌握这些技术和框架将使你成为一位全面的J2EE程序员,能够适应各种企业级项目的挑战。不断...

    extjs3.0源码

    * 提供了参照DWR后与后台的通讯包Direct,支持具有明显的REST风格的CRUD服务 * 一系列的新的组件和例子,包括有图表(Charting, By YUI Flash) * Bug修正,大约有一千多个吧~IE6下面的内存管理亦有所改善了 * 文档...

    cjlib详解撒地方,有兴趣的一定要好好看看,原理性的东西及应用

    cjlib可能提供了丰富的类和方法,以及详细的文档说明,帮助开发者快速上手。 4. **多平台支持**:考虑到跨平台兼容性,cjlib可能已经针对不同的操作系统(如Windows、Linux、macOS)进行了优化,确保在不同环境下都...

    Web/B.S/斗地主游戏

    后台基于javabean servlet 前台基于 dwr ext 等 简单功能实现的斗地主 可能有bug 分享

    java技术员必下的最强大的插件,搜索JSmart_1.3.1.jar(寻觅插件)然后下载

    文件太大,无法上传,请联系... 2008年6月修正了生成自定义MVC框架时的包名不能自定义的bug,修正了MYECLIPSE5.5开发struts1.3的bug 自定义MVC框架时加入了批量生成功能,支持多选文件  加入了运行前的提示框

    b/s的jsp/servlet斗地主游戏大厅

    后台基于javabean servlet 前台基于 dwr ext 等 简单功能实现的斗地主大厅 可能有bug 分享

    java开发者必用的插件,搜索JSmart_1.3.1.jar(寻觅插件)然后下载

    2008年6月,修复了生成自定义MVC框架时的包名不能自定义的问题,并解决了在MyEclipse 5.5下开发Struts 1.3时遇到的bug。 此插件适用于Eclipse 3.2, 3.3 和 MyEclipse 5.5, 6.0平台,并且提供免费版本供开发者使用。...

    Ext JS 3.0 正式版

    * 提供了参照DWR后与后台的通讯包Direct,支持具有明显的REST风格的CRUD服务 * 一系列的新的组件和例子,包括有图表(Charting, By YUI Flash) * Bug修正,大约有一千多个吧~IE6下面的内存管理亦有所改善了 * 文档...

    ExtJs3.0官方core和例子

    * 提供了参照DWR后与后台的通讯包Direct,支持具有明显的REST风格的CRUD服务 * 一系列的新的组件和例子,包括有图表(Charting, By YUI Flash) * Bug修正,大约有1k多个吧~IE6下面的内存管理亦有所改善了 * ...

    Jetty中文手册

    这个wiki提供jetty的入门教程、基础配置、功能特性、优化、安全、JavaEE、监控、常见问题、故障排除帮助等等。它包含教程、使用手册、视频、特征描述、参考资料以及常见问题。 Jetty文档 ---------------- 入门...

    软件开发工程师简历模板

    - **////与处理系统**:此项目采用了Struts2.1、Hibernate、Spring、DWR、Log4j、JSP等技术,设计模式为B/S模式下的SSH框架。项目涉及模块化设计、分层架构、数据处理与权限管理,展现了复杂系统的设计与实现能力。...

    BAMS-JAVA快速开发框架 2.5

    只要java基础扎实,再稍懂一点js即可,真的是为java开发人员量身定制的一套框架啊),框架以Spring Framework为核心、Jsp+Dwr作为模型视图控制器、Hibernate作为数据库操作层。BAMS 2.5 更新日志:2015-07-091、修复...

    Velocity Suite 1.2.3

    I have created a .dwr search query that will find velocity code that does not meet this standard and replace it with the correct spacing. see http://velocity.gilluminate.com to obtain it.] [Version ...

Global site tag (gtag.js) - Google Analytics