老程序员谈谈这几年使用jsf的感受

hoslay1 2016-05-06 12:35:00
2011年公司选择了jsf作为项目开发框架,经过5年逐渐对这个框架了解越发深刻。
初接触jsf,各种不适应,不能在jsf页面嵌入java代码控制页面控件显示隐藏;校验机制僵化,没法对提交的部分控件做部分校验;每次页面提交都会序列化与反序列化viewstate;甚至页面上判断if,for等循环写法都有很大的区别。令人不解的几大生命周期;看似美好的组件重用看起来并没有什么太大的用处。
后来接触多了,发现jsf在一些处理上还是有独到之处,如对viewstate的支持就大大简化了对象的存储;将http请求响应开发模式转变为事件驱动开发方式等,都是比较有意思的设计思路。
使用jsf到底是利多还是弊多?我来谈谈我的看法。
jsf的弊端:
1.标准的与一些第三方框架的组件,很难满足一些复杂业务的需要。复杂组件往往需要自定义,但自定义的组件有很难具备通用型(一般的程序员很难规划一个粒度适中的组件)。如数据表格变为三级表头,动态合并行等等。
2.viewstate看似比较笨重,不论提交一个控件还是多个控件都会把后台的属性序列化为viewstate隐藏文本,用于恢复视图,每次会多余提交10-100k的内容。
3.文档较少,资料难查,这点不用多说
4.组件本身实现有缺陷,如文件上传有时候无法正常上传,日期文本等在一些浏览器上的样式问题,默认样式太丑等。
5.接着上一点,修复缺陷的代价太大,出错之后无从找起,比如文件上传用richfaces的几天搞不定,自己用servlet写了一个,用一个h:inputhidden来作为中间变量,两天搞定。自己写的东西自己能全程把控,开源框架号称有源码但几人能看懂。
6.缺乏一个给力的IDE,市面上目前的ide很难支撑实际业务开发需要,只能做一些粗浅的表单页面,离客户实际使用太远。
其中个人认为第五条最让人难以接受。第六条限制了jsf的普及。
但jsf就这样神秘,笨重,这么一无是处吗?
1.jsf将复杂的http请求响应的开发模式转变为事件驱动开发,简单容易理解,学习过vb,delphi等都应该有深刻体会。
2.viewstate将数据序列化到页面上提交时反序列化,极大的简化了程序员在数据存储上的工作。如用户id,编号,名称,性别等字段信息,在struts中必须用4个隐含控件放到前端和后端action页面数据对象绑定,或者前端只有一个用户id,后端在每次请求到达或处理时重新从数据库取,这些都需要代码实现。使用jsf的话只要第一次获取了数据,今后不论多少次处理这些属性都可以通过对象直接获取。
3.jsf在搭配一个给力的ide时将会展现出无与伦比的力量。
4.jsf允许自定义组件,这样的思想,如果被合理使用将大大减少项目开发成本。
总得来说jsf有利有弊,个人认为衡量一个技术好不好是很难的,不能人云亦云。只有最适合的技术没有最好的技术。
jsf使用时首先要分析客户群体,比如都是网络比较差的用户或互联网应用,那么考虑用jsp和servlet。
jsf本质上就是html。因此无法实现或者它不方便实现的功能都可以用html技术加隐藏文本替代。如文件上传,多行表头,各种html5控件,还有浏览器兼容样式问题其实都可以绕开jsf本身的机制;不要为了技术而技术,绕开一门技术还有另外的技术,绕开技术的解决方式还可以有非技术的处理方式。
另外最后一个很重要的一点,使用jsf如果能有一个好用的IDe将是一件如虎添翼的事。
...全文
2195 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
奋斗者_小哥 2020-03-02
  • 打赏
  • 举报
回复
有人把jsfsession共享搞定了没
vicky_lxw 2017-09-27
  • 打赏
  • 举报
回复
我也是用了好多年的jsf,和楼主差不多,也有感触。最大的感触是,只要是非前端出身的程序员,利用jsf的事件驱动是很容易掌握的,然后我们又给予模型驱动自己开发了一个eclipse的插件帮助生成jsf的页面,目前看来对于企业级应用是够用了。jsf的sessionbean运用的最多,我们当初也想到过负载均衡会话共享的问题,但是好像jsf和spring-session整合有些问题,不是每次都能将sessionbean存成功,后来就放弃了,因为感觉没有那么高要求的平滑负载,不知道有什么场景需要做到这个
weikeli19 2016-06-26
  • 打赏
  • 举报
回复
嗯 支持撸主~~~~~~~~~~~~~~~~~
gadzs1234 2016-06-17
  • 打赏
  • 举报
回复
您好,请教JSF的使用问题。JSF项目很多bean直接使用session或者view的scope,这样整个实体内容就都存入session了。 如果要建立JSF的负载均衡,做session共享,很多对象无法序列化,如注入的service和hibernate等。 我使用了MemcachedSessionManager和RedisSessionManager都遇到这个问题,您在使用中是否遇到过? 您这边做JSF项目的session共享是怎么做的?谢谢!
街头小贩 2016-06-17
  • 打赏
  • 举报
回复
oldmtn 2016-06-17
  • 打赏
  • 举报
回复
心之所向0 2016-05-06
  • 打赏
  • 举报
回复

2,100

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧