对于标记库,不想再说些什么了。jsf可能最大的毛病都在这个标记库上面,首先定义的标记在jsp中,并不起到相应的输出功能,而只是用来增加相应得组件。在jsf中,最上层的组件为UIViewRoot,基本上所有的操作都是需要围绕着此组件。而标记库的存在,只是为了简化相应的操作。如下的标记:
<f:view>
<h:form>
<h:panelGrid>
.
</h:panelGrid>
</h:form>
</f:view>
其实对应的java代码,如下:
FacesContext context = FacesContext.getCurrentInstance();
UIViewRoot root = context.getViewRoot();
HtmlForm form = new HtmlForm();
HtmlPanelGrid grid = new HtmlPanelGrid();
form.getChildren().add(grid);
root.getChildren().add(form);
也就是说没有标记库,我完全可以使用java代码完成。
那么标记库的存在到底有没有意义,意义可能就在于简化相应的操作,想想html的属性是比较多的,如果每个都要用java代码去控制,那么可能对于应用来说,显得很不灵活,因为改代码毕竟没有改jsp来的快。而且代码需要重新编译。所以jsf的标记库存在也是有点意义的。
可是,现在的问题是,由于jsf本身就是规范,其实现也就会各有不同,对于每种实现都会带有自己的那一套标记库,随着标记库的增加,对于使用者来说,也是不堪忍受的重负。所以,有些时候,如果需要动态做一些配置,那么还是丢弃标记库,用java代码来完成吧。当然facelets,提供了一种方式,用于很灵活的扩展多个标记库,可是,看着那么多的标记,总是还有些头疼。
其次,对于标记库来说,各个标记库的不兼容也是一个很大的问题。就拿jstl和jsf来说,jstl的变量声明,在jsf中肯定是没有办法解析的,同样jsf中的变量,在jstl中也不能认识。我指的是页面声明的变量,而不是session变量,如下的例子:
<h:dataTable styleClass="table-background"
rowClasses="table-odd-row,table-even-row"
cellpadding="3"
value="#{recordBean.records}"
var="record"
binding="#{recordBean.recordData}">
<c:if test="${record}">
</c:if>
</h:dataTable>
在dataTable中声明了变量record,但是在jstl中是不会认识的。
可能这个问题,facelets已经解决了,主要facelets把所有的Elcontext中的变量都结合在了一起,使用自身的FaceletsContext。
不过,如果我只是需要简单的功能,还需要使用facelets,那么也就有点大材小用了。况且facelets也只是提供了类似tiles的功能。
最后,想说的是,虽然jsf目前的ide支持,比其他框架多多了。可惜,人家都是建立在相应的标记库上的,如果你定义了自己标记库,人家不一定会认识。所以标记库的存在,对于jsf来说,也许并不一定是好事情,可能sun觉得如果把jsp抛弃了,有点可惜。所以在升级jsf的同时,也升级了相应得jsp规范。
个人觉得,也许模版技术,可能也会是一种选择,看看velocity和freemarker,觉得其比jsp有优势多了。
分享到:
相关推荐
JSF(Java Server Faces)技术为开发基于网络用户界面的Java开发者提供了标准的编程接口API以及标签库。就像Struts框架一样,JSF定义了一套JSF标签 JSF的全称 1、Joint Strike Fighter (JSF) 2、Java Server ...
JSF为JAVA的 Web应用用户界面的开发人员提供了标准的编程接口、丰富可扩展的UI组件库(一个核心的JSP标记库用来处理事件、执行验证以及其他非UI相关的操作和一个标准的HTML 标记库来表示 UI组件)、事件驱动模型等...
JSF为JAVA的 Web应用用户界面的开发人员提供了标准的编程接口、丰富可扩展的UI组件库(一个核心的JSP标记库用来处理事件、执行验证以及其他非UI相关的操作和一个标准的HTML 标记库来表示 UI组件)、事件驱动模型等...
JSF为JAVA的 Web应用用户界面的开发人员提供了标准的编程接口、丰富可扩展的UI组件库(一个核心的JSP标记库用来处理事件、执行验证以及其他非UI相关的操作和一个标准的HTML 标记库来表示 UI组件)、事件驱动模型等...
Web应用用户界面的开发人员提供了标准的编程接口、丰富可扩展的UI组件库(一个核心的JSP标记库用来处理事件、执行验证以及其他非UI相关的操作和一个标准的HTML 标记库来表示 UI组件)、事件驱动模型等一套完整的Web...
对于像JSF这样基于组件的库,上述情况带来一个问题:为了识别新属性,所有已有的组件必须更新。对于需要显式支持这些属性的组件而言,的确如此。但在很多情况下,组件只需要在最终生成的标记中包含这些属性即可。JSF...
软件介绍 告诉你如何构建更强劲的应用而不用乏味的手写代码;回答多数开发者甚至不会问的问题;演示如何使用JSF和Tiles自动构建一致的...覆盖全部JSF标记和如何创建新的标记库,英文,原名称:Core JavaServer Faces
标签文本类似于标准 JSF 复合 API 的库。 它基于 Mojarra 实现,不支持 Myfaces。 与标准复合组件不同,它: 不会在 JSF 组件树中创建新的组件节点允许将非组件标签包装为 <p> 或转换器Tagext 库的主要目的是以与 ...
JavaServer Faces 带有PrimeFaces,Hibernate和Maven的JavaServer Faces。 目录 恢复 ... 标记库,用于将组件添加到网页以及将组件连接到服务器端对象。 JavaServer Faces技术提供了定义明确的编
蝙蝠在线考试系统基于JSF2、Spring3、JPA2等JAVA技术构建,系统使用MYSQL数据库,可以部署于WINDOWS、LINUX、UNIX等各种操作系统,内置了无处不在的AJAX能力,简洁易用,支持单选题、多选题、填空题、判断题、问答题...
Laika.zip,用于将轻量级文本标记转换为各种类型的输出格式的库,用scala text标记转换器为sbt和scala应用程序编写,将markdown和structuredtext转换为html、epub和pdf
Seam - 语境相关的组件[满江红20071230]..........................................................................1.6.4. Seam 的UI 控制库........................................................................
通过razor页面的前端标记库实现表现层,它调用背板代码提供的对象实现数据绑定。 本应用还包含一些额外的技术内容: 文件系统读写 读取压缩包 高质量缩略图生成 架构 主要包含以下技术要点: dotnet - 应用开发...
第二版增加了新的章节来专门探讨安全、与JSF API的集成、JSP标准标记库(JSTL),以及Struts的表达式语言(EL)。此外,第二版对第一版中原有的主题也做了扩充。对于每一个自己所开发的企业系统,本书作者Chuck ...
使用该标记库,利用 Google 为你的网站提供网站查询,并且可以直接在你的网页里面显示搜查的结果。 github-java-api github-java-api 是 Github 网站 API 的 Java 语言版本。 java缓存工具 SimpleCache ...
优点: 架构简单——易于扩展 标记库很容易利用FreeMarker或者Velocity来定制 基于控制器或者基于页面的导航 缺点: 文档组织得很差 对新特征过分关注 Tapestry 优点: 一旦学会它,将极大地提高生产率 HTML模板...
UFBA机会开发环境文档1 - 在 Eclipse 中创建动态项目以使用 JSF 进行配置2 - 右键项目按钮 -> 团队 -> 共享项目 -> Git -> 选中“在项目的父文件夹中使用或创建存储库”选项 -> 选择您的项目 -> 然后单击“创建存储...
使用该标记库,利用 Google 为你的网站提供网站查询,并且可以直接在你的网页里面显示搜查的结果。 github-java-api github-java-api 是 Github 网站 API 的 Java 语言版本。 java缓存工具 SimpleCache ...
使用该标记库,利用 Google 为你的网站提供网站查询,并且可以直接在你的网页里面显示搜查的结果。 github-java-api github-java-api 是 Github 网站 API 的 Java 语言版本。 java缓存工具 SimpleCache ...
使用该标记库,利用 Google 为你的网站提供网站查询,并且可以直接在你的网页里面显示搜查的结果。 github-java-api github-java-api 是 Github 网站 API 的 Java 语言版本。 java缓存工具 SimpleCache ...