|
锁定老贴子 主题:对jsf的怨念
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
时间:2007-03-16 关键字: jsf
前一段时间看上了JSF所以就试着用jsf来写我的个人网站,写到现在一半多了,对他的怨念越来越强了!希望有哪一位高人可以帮我解脱下。
首先,jsf号称组件化编程,但在页面生成的阶段跟本没办法根据我的要求来增删改组件,这是我最大的怨念。jsf在生命周期的最前端“restore view”时生成了一个组件树,可这个组件树和后来的生命周期“render response”根本就不是相同的组件树,所以,你在组件树中的操作最多只能带到“invoke appllication”中,根本就对他的显现没什么关系,因为在组件树生成阶段他根本就不知道要显现的页面,他只会生成用户请求的组件树。这个组件树,应该是已经被序列化在HTML中的一个"hidden input"中。我在许多应用中还挺想用这个特性的,例如:对权限的设计的时候,想根据配制来显示和不显示组件,目前看来,这种方法也不能实现了。想根据一个配制文件去动态生成一个页面,这种应用,也不知要如何下手了。 其次,在标准的实现在,他的校验的组件,竟然没有javascript校验也没有ajax的方式来做校验,他只能根据用户的提交做服务器端的校验,在一此非业务逻辑的校验,在客户端能较验出来就好,因为一个EMAIL格式不对,再从,服务那里返回来,这好像说不过去点。这一点还好,我看到 了“ADF”他的组件库里,可以实然在客户端的较验,可我还没有把他加到我的应用中来。所以好不好用还不好说。 第三,以前,总觉得,asp.net有一个state view自动在客户端保存着让人很不爽(这是我个人觉得,以前刚用的时候不惯吧),现在没想到jsf 比asp.net更狠,用了两个hidden input。一个放state,一个放组件树,晕死,虽然可以放在session中,但总得还是有点不爽。 第四,在标准实现在,jsf竟然没有办法和jslt混用,jsf的运行期和jsp的,有很多地方不同,所以没有办法,在使用jslt的时候使用jsf自带的标签。想想jslt多常用啊,在许多不能用标准组件,又不想自己写组件时是十分有用的。在当时我没有使用facelets时,为了使用jstl还做了还用了很土的方法,用自己写的一段javascript来代替jsf组件。不过,如果你用的是jsf1.2那你就不会有这个怨念了。 总之,这就是我对JSF的怨念,除了第一个没有办法解决以外,其他的都已经有很好的解决办法。 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
时间:2007-03-19
有空我的话,我会再写一下,jsf让我爽的地方
|
|
| 返回顶楼 | |
|
时间:2007-03-19
guoshiguan 写道 有空我的话,我会再写一下,jsf让我爽的地方
期待你的推出 |
|
| 返回顶楼 | |
|
时间:2007-03-19
为什么大家都盯着JSF?推荐大家去看一下wicket,就知道JSF是多么的不好用。。。
|
|
| 返回顶楼 | |
|
时间:2007-03-21
zhlmmc 写道 为什么大家都盯着JSF?推荐大家去看一下wicket,就知道JSF是多么的不好用。。。
主要是比较关心oracle adf faces |
|
| 返回顶楼 | |
|
时间:2007-03-21
现在JSF各种各样组件太多了,最大的问题是不兼容!就MyFaces来说吧,它也不是100%兼容sun的官方实现啊。而且JSF的标签真的很恶心,如果没有Seam的话,JSF根本没法用。。。。
|
|
| 返回顶楼 | |
|
时间:2007-03-25
Hi,guoshiguan
对于第一个问题,JSF是可以通过Tag的binding属性来动态生成UI组件的 JSP: <h:panelGroup id="dynamicGroup" binding="#{dynaHandler.dynamicPanelGroup}"></h:panelGroup>
Java code
private HtmlPanelGroup panelGroup;
public HtmlPanelGroup getDynamicPanelGroup(){
Application application = FacesContext.getCurrentInstance().getApplication();
if (this.panelGroup == null) {
this.panelGroup = (HtmlPanelGroup) application
.createComponent(HtmlPanelGroup.COMPONENT_TYPE);
}
List children = this.panelGroup.getChildren();
children.clear();
HtmlOutputText outputText = (HtmlOutputText) application
.createComponent(HtmlOutputText.COMPONENT_TYPE);
outputText.setValue("JSF");
children.add(outputText);
return this.panelGroup;
}
这样就可以在页面中动态生成一段Text文本 JSF动态组件生成能力,确实值的高级用户关注.但目前来看,好象JSF在这块缺乏足够的支持. 以前有一个叫做smile的工程,可以在服务端生成整个页面,但这个项目已经停掉了,据说捐给 了MyFaces. 我在MyFaces里死活没找到. |
|
| 返回顶楼 | |
|
时间:2007-03-27
天之魔神 写道 不知他和STRUTS标签有什么区别,期待你的作品
struts 1.2里和jsp的标签一样只是简单的生成html的作用,他不直接处理用户的返回值,当然,也不会管事件和效验,还有数值的转换 这是我的一篇关于组件的开发,有兴趣的可以看下, http://www.javaeye.com/topic/65794 |
|
| 返回顶楼 | |
|
时间:2007-03-27
JJYAO 写道 Hi,guoshiguan
对于第一个问题,JSF是可以通过Tag的binding属性来动态生成UI组件的 JSP: <h:panelGroup id="dynamicGroup" binding="#{dynaHandler.dynamicPanelGroup}"></h:panelGroup>
Java code
private HtmlPanelGroup panelGroup;
public HtmlPanelGroup getDynamicPanelGroup(){
Application application = FacesContext.getCurrentInstance().getApplication();
if (this.panelGroup == null) {
this.panelGroup = (HtmlPanelGroup) application
.createComponent(HtmlPanelGroup.COMPONENT_TYPE);
}
List children = this.panelGroup.getChildren();
children.clear();
HtmlOutputText outputText = (HtmlOutputText) application
.createComponent(HtmlOutputText.COMPONENT_TYPE);
outputText.setValue("JSF");
children.add(outputText);
return this.panelGroup;
}
这样就可以在页面中动态生成一段Text文本 JSF动态组件生成能力,确实值的高级用户关注.但目前来看,好象JSF在这块缺乏足够的支持. 以前有一个叫做smile的工程,可以在服务端生成整个页面,但这个项目已经停掉了,据说捐给 了MyFaces. 我在MyFaces里死活没找到. 你说的这种方式我也想过,但,他没有办法更改组件的值,这个才是让人郁闷的地方 |
|
| 返回顶楼 | |
|
时间:2007-03-27
zhlmmc 写道 现在JSF各种各样组件太多了,最大的问题是不兼容!就MyFaces来说吧,它也不是100%兼容sun的官方实现啊。而且JSF的标签真的很恶心,如果没有Seam的话,JSF根本没法用。。。。
的确有这种事情发生,我也遇到过,但,现在的JSF的组件,已经完善了,应该不用一次性有太多种的组件库 |
|
| 返回顶楼 | |







