手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>程序设计>Java技术>列表

JSP和JSF双剑合并 共同打造完美Web应用

来源:互联网 作者:west263.com 时间:2008-02-23
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!

上面2行代码声明了JSP中要使用哪一个JSF标签库。内核库使用前缀(prefix)f声明,而HTML库使用前缀(prefix)h声明。这两个前缀并不是必须要使用,而只是一个建议。在程序中,内核库必须要使用,因为view在所有的JSF页中必须使用。而HTML标签在运行时将JSF标签转化为HTML组件,这个h前缀并不是必须的,而是JSF规范推荐使用的,这样,我们使我们的JSF程序更易读。

在声明后是几行标准的HTML语句,本文不再详述。从<f:view>开始,是一段JSF语句。这段代码如下所示:

<f:view>

<h:form id="simpleForm">

<h:outputText id="favoriteLabel" value="请输入一个数字:"/>

<h:inputText id="favoriteValue" value="#{simple.longValue}">

<f:validateLongrange maximum="30" minimum="0"/>

</h:inputText>

<p/>

<h:commandButton id="submit" value="提交"

action="#{simple.simpleActionMethod}"/>

</h:form>

</f:view>

</f:view>标签预示着JSF的开始,而它的下一个标签form将建立一个HTML Form。而outputText标签相当于HTML中的label组件。inputText标签相当于HTML中的textField组件。而commandButton标签相当于HTML中的submit按钮。

三、JSP如何响应JSF的请求

从上面的例子我们已经知道如何在JSP中使用JSF了,在这一部分让我们来看看在JSF是如何处理请求的。

首先让我们来看一个例子,这个例子是将华氏度转换为摄氏度。当用户点击提交按钮时程序将进行转换。

<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>

<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>

<html>

<head>

 <meta HTTP-EQUIV="Content-Type" CONTENT="text/html;CHARSET=GB2312">

<title>温度转换程序</title>

</head>

<body>

 <f:view>

 <h:form>

 <div>

  <h:outputText id="fahrenheitLabel" value="请输入华氏温度:"/>

  <span>

   <h:inputText id="temperature" value="#{tc.fahrenheitTemp}">

   <f:validateDoublerange minimum="-100.0" maximum="100.0"/>

   <f:valuechangeListener type="tempconv.page.TCChangedListener"/>

  </h:inputText>

  </span>

 </div>

 <div>

  <h:outputText id="celsiusLabel" value="摄氏温度:"/>

  <span>

   <h:outputText id="celsiusValue" value="#{tc.celsiusTemp}">

   <f:convertNumber maxFractionDigits="3" type="number"/>

  </h:outputText>

  </span>

 </div>

 <div>

  <h:commandButton value="转换" action="#{tc.convert}">

  </h:commandButton>

 </div>

 </h:form>

 </f:view>

</body>

</html>

在程序的前两行是导入JSF核心库和HTML库,这个在前面已经讨论过,在这里不再详述。

下面让我们来看看JSF标签是如何同后端进行交互的。由于我们是在JSP中使用JSF,因此,这个和正常的JSP没有什么区别;JSP实际上就是Servlet,在JSP第一次运行时由JSP编译器将.JSP文件编译成Servlet后再由Servlet调用,然后由Servlet来接收客户端传过来的数据流。但和一般的JSP程序不同的是,JSF标签是由JSF API负责调用的(这样可以做到逻辑层和表现层分离),除此之外,它们和一般的JSP标签没有任何区别。

当UIComponent标签收到doStartTag方法时,JSF将使用这些属性来设置标签的值。如本例中的inputText标签将按它的属性值来设置。下面是JSF的代码片段。

<h:inputText id="temperature" value="#{tc.fahrenheitTemp}">

 <f:validateDoublerange minimum="-100.0" maximum="100.0"/>

 <f:valuechangeListener type="tempconv.page.TCChangedListener"/>

</h:inputText>

inputText标签根据相应的值设置了id和value的属性。在JSF中是通过setAttribute(String name, Object value)设置每一个属性值的。但我们需要注意的是JSF标签可以指定相应的默认值。这有些类似java中的系统属性,如果你给了一个属性名子,那系统将返回这个属性的值,如果指定它的默认值,并且这个属性不存在的话,将返回这个默认值。

接下来让我们来看看上面程序的最重要的部分,也就是UIInput组件的事件处理。

<f:valuechangeListener type="tempconv.page.TCChangedListener"/>

在JSF中事件处理是由valuechangeListener标签完成的。这个标签所表示的事件在文本框的值发生变化时引发事件。但有意思的是这个事件并不马上提交,而是要等到用户点击"提交"按钮后这个事件连同相应的数据才提交给后端。因此,这个事件请求也叫做预提交。最后,让我们看看UICommand的代码实现。

<div>

 <h:commandButton value="转换" action="#{tc.convert}">

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!