对于标记库,不想再说些什么了。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标记语言(Facelets)定义了页面结构和行为。我们可以在这里看到JSF组件的使用,如`<h:form>`、`<h:outputText>`和可能的PrimeFaces组件。 4. **META-INF** 这个目录通常...
这些组件通过XML标记(例如在JSP页面中使用JSF标签库)进行声明,使得页面布局和逻辑更易于理解。 2. **FacesServlet**:JSF的核心是FacesServlet,它是处理所有JSF请求的入口点。当用户与JSF页面交互时,请求会被...
5. **JSTL核心库**和**JSTL函数库**:这两个库提供了JSP Standard Tag Library的标签,如`<c:if>`和`<c:forEach>`,以及函数库如`<fn:length>`,增强了JSF应用的功能。 6. **Facelets Templating库**:提供模板和...
2. **JSF页面(.xhtml文件)**:JSF使用XML语法和XHTML标记来定义用户界面。这些页面会包含JSF组件,如`h:inputText`(文本输入框)、`h:commandButton`(提交按钮)等,以及可能的EL(Expression Language)表达式...
1. **JSF组件库**:JSF提供了一套标准的UI组件,如按钮、输入字段、表格等,开发者可以通过简单的XML标记在页面上声明这些组件。 2. **JSF生命周期**:JSF有六个阶段,包括恢复视图、应用请求值、处理验证、更新...
这个“IDEA创建JSF项目所需jar包.zip”文件包含了两个关键的库文件,它们对于在IDEA中成功搭建JSF项目至关重要。下面我们将详细探讨这两个jar包的作用以及JSF项目的构建过程。 1. javax.faces(1).jar: 这个jar...
开发JSF应用程序需要一些基础库,包括`jsf-api.jar`、`jsf-impl.jar`等,以及一些Apache Commons库,如`commons-beanutils.jar`、`commons-digester.jar`。此外,还需要JSP和Servlet的相关库,如`jsp.jar`(JSP1.2...
1. **组件模型**:JSF提供了一系列预先定义好的UI组件,如按钮、表单、输入字段等,可以通过简单的XML标记在页面上使用。这些组件可以进行定制和扩展,以满足特定的应用需求。 2. **事件驱动**:JSF采用事件驱动...
3. **添加库**:JSF项目需要一些必要的库文件,如jsf-api.jar和jsf-impl.jar。MyEclipse会自动把这些库添加到项目的类路径中,确保项目可以正常运行。 4. **创建JSF页面**:JSF页面通常以.xhtml为扩展名,是XHTML与...
JSF通常使用XHTML作为视图层的标记语言,因为它结合了HTML的语义和XML的结构。在login界面的XHTML文件中,我们会看到`<h:form>`、`<h:inputText>`、`<h:commandButton>`等JSF特定的标签,它们分别用于定义表单、...
JSF不断推出新的特性来提高框架的稳定性和易用性,比如客户端组件标识算法的改进、自定义信息的改进等。 ##### 5. 客户端技术的整合 JSF框架支持与JavaScript等客户端技术的无缝集成,这有助于提升用户体验。例如...
在提供的压缩包中,很可能包含了一本关于JSF的PDF文档,这将深入解释JSF的各个方面,包括组件库、页面导航、数据验证、国际化和本地化等主题。另一份JSP中文学习文档可能有助于理解JSF与JSP的关系,因为JSP可以作为...
另一方面,HTML标记库(html taglib)通过`<%@taglib uri="http://java.sun.com/jsf/html" prefix="h"%>`引入,包含了一系列与HTML组件对应的JSF标记。这些标记允许开发者创建HTML元素,如输入字段、按钮和表格,...
`@ManagedBean`注解标记一个类作为JSF管理Bean,而`@ViewScoped`则定义了Bean的作用范围,使得Bean的生命周期与特定视图(页面)关联。此外,还可以使用`@FacesConverter`和`@FacesValidator`注解来自定义转换器和...
5. **XHTML页面**:JSF使用XHTML作为视图层的标记语言,可以与Java代码和EL表达式混合使用。 **JSF学习路径**: 1. **环境搭建**:首先,你需要安装Java Development Kit (JDK) 和一个支持JSF的服务器,比如Tomcat...
选择"新建",标记为"是JSF实现",然后添加JSF的库文件。 - 同样,你可以添加JSTL库,但这次不要选择"是JSF实现"。 5. **新建JSF项目** - 配置完成后,你就可以开始创建JSF项目了。选择"文件" -> "新建" -> "动态...