`

warp-mvc

mvc 
阅读更多

转载自:http://www.iteye.com/topic/176623

 

契机是robbin老大之前的一个帖子,评说warp这个基于guice的框架是蛮有前途的,之前一直羡慕ajoo老大可以在项目中使用guice,可又不知道如何下手,这次有了引子也可以见识一下guice的风采了。 

话说这个guice可是完全使用annotation进行依赖注射、可通过官方那22页的说明文档楞是怎么也不明白guice的用法(连一个能直接跑的例子都没有,纯理论讲解),这个基于guice的warp则是提供了warp-mvc和warp-persist,前者自创了一套类似与tapestry的组件式页面导航方式,后者则是能完全依靠注解实现hibernate的查询操作,初看时,代码那个简练,语法那个轻巧,可实际用的时候直叫在下呕血三升啊。(在下是菜鸟,不过菜鸟也是人啊,市面上还是菜鸟多,您说是不?) 

首先说说warp-mvc,以前很迷tapestry,非常崇拜它那种一次开发到处应用的组件式开发,而且还可以彻底摆脱jsp的约束,前台模板使用html,号称美工可以对模板直接修改。但是这种东西学习曲线太大了,您想想,要把所有的页面效果都换成组件(component)那是何等巨大的工作量啊,在佩服作者完成这项转换工作之后,咱们又要重新背诵一遍这些组件的用法。。。。别的不管,先吐血一升再说。 

窃以为,实现tapestry,jsf那种组件化开发,一定要ide支持,光靠手写代码加大脑记忆太不现实了,对于一般开发者来说,为了做那么几个小东西就要去熟悉庞大的组件库,得不偿失啊。 

话说回来warp-mvc作者为了设计精巧提倡复用,自己简化了tapestry,可您简化什么都好,怎么把实时修改模板的功能给简化去了?html模板文件仅仅在系统初始化时加载一次,找不到模板就会直接启动失败,如果想改模板,那可对不起只能重启了,任你如何刷新也看不到修改效果。而且warp-mvc中的组件标签也不美,至少我从字面上看不出来它究竟实现的什么功能,您能猜出来吗? 

Java代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <html xmlns:w="http://www.wideplay.com/warp/schema/warp_core.xsd"  
  3.     xmlns="http://www.w3.org/1999/xhtml"  
  4.     xml:lang="en" lang="en">  
  5.   
  6.   <head w:component="meta">  
  7.     <title>Warp :: List Blogs</title>  
  8.   </head>  
  9.   
  10.   <body w:component="frame">  
  11.     <h1>A list of blog entries</h1>  
  12.   
  13.     <table w:component="table" w:items="${blogList}">  
  14.         <td w:component="column" w:property="subject">  
  15.             <a w:component="hyperlink" w:target="blog" w:topic="${id}">  
  16.         ${subject}  
  17.         </a>  
  18.         </td>  
  19.     </table>  
  20.   
  21.     <a href="blogs/compose">compose new entry</a>  
  22.   
  23.   </body>  
  24. </html>  


怪罪完warp-mvc现在开始埋怨warp-persist,必须要承认的是这种@Finder(query = "from tableName")的设计的确精巧,让人看着赏心悦目,可不知道是warp的原因,还是guice的限制,如果想让guice自动控制依赖注射,只能先写个interface,然后写impl,在impl里写。 

Java代码   收藏代码
  1. @Finder(query = "from tableName")  
  2. @Transactional  
  3. public List getAll() {  
  4.     return null;  
  5. }  


这个return null实在让人觉得怪异,这个方法会在执行时,被warp-persist中的拦截器拦截,通过annotation去执行查询,可为什么不能直接写到interface里呢? 

Java代码   收藏代码
  1. @Finder(query = "from tableName")  
  2. @Transactional  
  3. List getAll();  


这样省代码,省文件,省心力的工程在spring中只要配置一个proxy就可以批量实现,而在guice中,需要你手工为每个interface配置warp提供的一种叫accessor的东西才能处理。苦恼啊,肯定是因为我不懂guice才会这么苦恼,不过在学会guice之前,也只能抱怨他们给的解决方案太太不美观了,一个一个设置accessor我不如手工把代码全写上算了。 

最后还要抱怨一下warp-persist的filter,这个东西应该是用来实现spring那种OpenSessionInView功能的,可用起来却总是出现session is closed的错误(不好意思,这里要把<property name="current_session_context_class">managed</property>,我刚开始没好好看网上的介绍。),我想把它里边的代码(看了看不到10行)复制到自己的过滤器里调试一下,看看是不是调用顺序问题,结果它告诉我:“使用的类是被保护的,包外不可见”。好的,你不可见,那我不用了,自己照着spring的OpenSessionInView写了一个,结果很好用,但是对自己的实现没信心啊,谁让咱们是菜菜鸟呢。 

呼~抱怨完毕,真心期待一种零配置的guice框架出现,最好是仿照springmvc-2.5里那种,方法里参数想要什么就可以自动绑定的。 

Java代码   收藏代码
  1. // 自动转换parameter中的参数类型  
  2. public String index(@Param("id"int id) {  
  3.     Blog blog = blogManager.get(id);  
  4. }  
  5.   
  6. // 自动获得response.getWriter()输出json  
  7. public void list(Writer out) {  
  8.    JsonUtils.write(blogManager.getAll(), out);  
  9. }  
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。

 

 

 

 

 

分享到:
评论

相关推荐

    warp-persist-2.0-20090214.zip

    warp-mvc:借鉴了Tapestry5,提供了一个基于事件机制和组件化的Web层,并且组件注入方式高度IoC化 warp-servlet: 提供了一些Servlet的封装和附加的高级功能,例如URL过滤,和其他web框架集成等等

    百度硅谷warp-CTC

    【百度硅谷warp-CTC】是百度公司在其硅谷研发中心推出的一种优化的连续标注计算(Connectionist Temporal Classification, CTC)实现,旨在提升在现代高性能计算硬件上的运行效率。CTC是一种常用的序列到序列模型的...

    warp-cli:使用祝福构建的CLI工具集原型

    【标题】:“warp-cli:使用Blessed构建的CLI工具集原型” 【知识点详解】: 1. **什么是CLI工具**: CLI(命令行界面)工具是通过文本输入指令来执行任务的软件,它无需图形用户界面,适用于自动化、脚本编写和...

    百度开源的人工智能软件 WARP-CTC.zip

    2016年新年伊始,百度硅谷实验室向 GitHub上传了 Warp-CTC C 代码库,并在一篇博客文章中鼓励开发者使用这些代码。据悉,CTC 代码结合了多个不同的神经网络设计,以处理不完美的数据集,并采用更复杂的数据模式,...

    为Arch_Linux提供可安装的Cloudflare_Warp_ArchLinux-Warp-deb.zip

    为Arch_Linux提供可安装的Cloudflare_Warp_ArchLinux-Warp-deb

    PyPI 官网下载 | sol-warp-0.1.3.tar.gz

    "PyPI 官网下载 | sol-warp-0.1.3.tar.gz" 这个标题揭示了我们正在处理一个Python项目的归档文件,它在Python的官方软件包索引(PyPI)上发布。PyPI是Python开发者分享和分发自己编写的库或模块的地方。"sol-warp-...

    Python库 | sol-warp-0.2.4.tar.gz

    标题中的"Python库 | sol-warp-0.2.4.tar.gz"指的是一个特定版本的Python库,名为sol-warp,版本号为0.2.4,并且它被压缩成一个tar.gz文件进行分发。在Python编程环境中,库(Library)是用于扩展其功能的模块集合,...

    Python库 | warp_rnnt-0.0.3.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:warp_rnnt-0.0.3.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    warp-v:WARP-V是用TL-Verilog编写的开源RISC-V CPU内核生成器

    WARP-V是用TL-Verilog编写的开源CPU核心生成器,支持RISC-V和MIPSI。它是一种演示和探索工具,可以利用新兴的“事务级设计”方法实现灵活性。 它可以实现单级低功耗微控制器或中型7级CPU。 甚至指令集体系结构(ISA...

    Guice+Struts2+warp-persist 简单实例

    借助Guice+Struts2+Warp-persist来构建一个比较轻盈的web开发框架,目的是想抛砖引玉。随后还会将Scala部分整合进来,目的就是唯恐框架不烂!(*^__^*)。 对于代码的不妥之处欢迎各路高手斧正。 mail to : meconsea@...

    Cloudflare WARP Release-x64.msi

    Cloudflare WARP Release-x64 安装包

    warp-proxy:生成代理或模拟服务器的命令行工具

    npm install warp-proxy --save-dev # only accessible via npm package.json commands 用法 # Proxying all requests to a remote server warp-proxy web --port 6543 --target http://mydesiredserver:1234 # ...

    warp-plus:此工具可在Warp +(https:1.1.1.1)上获得无限GB

    [+] AboutThis Tool warp-plus-cloudflare(wp-plus.py) 在Warp +上获得无限GB的工具( )[+]如何在Windows Os上使用此工具! 下载并解压缩运行此工具输入您的warp + ID并享受![+]如何获取经线+ ID? 打开1.1.1.1 ...

    luasocket:luasocket-warp-cocos2dx

    《 luasocket-warp-cocos2dx:Lua脚本与Cocos2d-x网络通信的桥梁》 在游戏开发领域,Cocos2d-x作为一款流行的开源2D游戏引擎,被广泛应用于移动平台。而Lua作为一种轻量级的脚本语言,因其简洁易学和强大的嵌入性,...

    sero-warp-1.0.0

    备用

    ovh-warp10-datasource:用于Warp10平台的Grafana数据源

    Grafana Warp 10:trade_mark:数据源插件 安装插件 使用grafana-cli sudo grafana-cli plugins install ovh-warp10-datasource installing ovh-warp10-datasource @ 2.2.0 from: ...

    Guice2.0+Hibernate3.2+warp-persist-2.0+Struts2+JPA

    轻量级的Guice2.0代替了Spring,速度更快,项目体积更小,Hibernate3.2与JPA的结合使用代替了传统的配置文件,使Hibernate的开发更简单,本项目基本上是零配置开发,由于我只能上传小于15M的文件,故JAR被我删除了,...

    基于xlvector模型上进行加工,验证码内容包含了大小字母以及数字,采用lstm+warp-ctc+cnn

    验证码识别,该模型是基于xlvector模型上进行加工,验证码内容包含了大小字母以及数字,采用lstm+warp-ctc+cnn达到不分割字符而识别验证码内容~LSTM (Long Short-Term Memory) 是一种特殊的循环神经网络(RNN)架构,...

    Go-warp让您通过一个简单的命令安全地共享您的终端

    在压缩包文件 "spolu-warp-8a04cd7" 中,我们可以推断这是Warp项目的源代码或者特定版本的构建文件。"spolu"可能是指项目作者的名字或别名,"8a04cd7"则可能是Git仓库中的一个提交哈希值,代表了该版本的特定改动。...

    git-warp-time:Rust库和CLI实用程序将文件时间戳重置为回购状态

    $ git warp-time 故事 每当您git clone一个项目或git checkout一个不同的分支时,Git都会在您运行Git命令时将所有相关文件写入您的系统。 逻辑上足够。 Git做正确的事。 在大多数情况下,文件的最新修改时间戳是磁盘...

Global site tag (gtag.js) - Google Analytics