使用JSF开发:视图(一)
一.MVC几乎是Java Web framework的结构总纲,不过纷乱的框架各有巧妙,实现各有不同。 一.Struts、Webwork、Spring MVC 基于C/S模式的设计结构,不隐藏基于请求/响应通讯协议内容的思维模式,早期的Web开发者,都已经习惯这样思考,学习曲线比较平滑,比较容易入门,而且Struts从诞生至今,抢占了不少市场,有大量的用户群。现在Struts和Webwork双剑合璧衍生出的Struts2是这种结构的最强代表,在普遍的企业系统中都可以胜任,是开发不错的选择。
(1).Tapestry、Wicket、JSF 基于组件的设计结构,亮点在于转变Web应用开发的思维模式,不能说新颖,但是很具特色,也已经被开发人员所接受,Tapestry诞生的比较早,在非官方的市场风光无限,个人也非常喜欢,但是3.0和4.x版本中都有一些令人不太愉快的地方,5.0目前还没有发布正式版本(莫非要等到零八奥运。。。)。三者之中Wicket的入门最快,学习曲线最低,而且笔者提供的组件相当丰富,是一个非常优秀的轻量级框架,一些比较小的企业系统中,强烈推荐使用。
(2).Other 还有一些其他的框架,如Echo2,Conoon,Shale,Tuibine等等,这些产品中有的自成体系,有的是其他产品的补充,虽然各有亮点,但是很难撼动前面两者的地位了。
(3).郁闷的JSF 同样的设计结构,Tapesty和Wicket诞生就伴随着很多的赞美,可是JSF却冷落了很多,批评和泼冷水的人居然占大多数(难道JSF是后妈生的…)。所有的JSR定义,实现由厂商来玩,基于接口编程的思维,定义与实现分离,这是不错的拆分解藕的设计,可是由于JSF定义本身不够完善合理,厂商初期的不太买账,开源的实现又不够稳定放心等等原因,果然导致JSF一片骂声。JSF真的有这么差,偶倒是觉得,见仁见智!
二.视图 JSF说到底MVC结构,我们就先来解决诟病最多的视图(View)层。JSF的缺省视图技术是JSP(不可能要求SUN自抽耳光,抛弃JSP是不可能滴),也是大家骂声最多的,诸如Taglib是失败的技术,不能所见即所得可视化编辑,缺少优秀的IDE支持,代码侵入严重,程序和美工不能良好分离。
View之一JSP
JSP作为J2EE中标准的视图技术,是相当稳定和强悍的。Taglib并不是一项失败的技术,不过它的确是一项学习曲线比较高的技术,在稳定的团队中有良好的表现,但是在流水的阵营中,学习和维护的成本可能真的是不太能接受的。
关于JSP和Taglib的指南,几乎使用Java开发Web应用的人都有涉猎,而且互联网上的教程例子一陀一陀的,就不说了。
引用一句老兄的话,无论多么优秀的语言,都可以写出糟糕的代码。JSP+Taglib是一项成熟和稳定技术,代码一样可以写的很优雅,不过对程序员和美工的要求都稍微都高了一点(#>.<)。
View之二Facelets
Facelets模板框架是目前JSF优秀的视图解决技术,基于标准的XML技术,让JSF的开发效率有了很大的提升。
模板
使用Facelets的具体步骤1.下载Facelets的最新发行包
2.引入jsf-facelets.jar到项目依赖库
3.配置web.xml文件 <context-param>
<param-name>javax.faces.DEFAULT_SUFFIX</param-name>
<param-value>.xhtml</param-value>
</context-param>
4.配置faces-config.xml文件 <application>
<view-handler>com.sun.facelets.FaceletViewHandler</view-handler>
</application>
到此为止,Facelets的准备工作已经OK,正式开工!
index.xhtml 代码 步骤一:创建布局页面 template.xhtml <!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title><ui:insert name="title">Default Title</ui:insert>
</title>
<style type="text/css">
body {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-