JSP和JSF合并 共同打造完美的Web应用-2

转载 2007年10月15日 17:05:00
三、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}">

</h:commandButton>

</div>

上面的代码将convert()方法和UICommand连接了起来,也就是说,点击"提交"按钮后,将执行convert()方法。在遇到view标 签后,JSF程序结果,JSFAPI最后调用doEnd方法来结束JSF程序。JSF引擎在解析这段程序后,将相应的JSF标签转换为HTML组件。

最后,让我们来看看JSP是如何响应JSF事件的。下面是一段响应JSF事件的Java代码。

public class TCChangedListener implements ValueChangeListener

{

public TCChangedListener()

{

super();

}

// 事件处理

public void processValueChange(ValueChangeEvent event)

throws AbortProcessingException

{

UIComponent comp = event.getComponent();

Object value = event.getNewValue();

if (null != value)

{

float curVal = ((Number) value).floatValue();

Map values = comp.getAttributes();

if (curVal < 0)

{

values.put("styleClass", "red");

}

else

{

values.put("styleClass", "black");

}

}

}

要想响应JSF事件,必须要实现JSF库中的ValueChangeListener接口。上面的程序要注意的是最后根据输入的值来设置相应的颜色。这些值并不依赖JSP。当然,你也可以将它们设置成null,而由JSP 标签来设置它们的颜色

 

 

http://hi.baidu.com/hookmars/blog/item/91a8cf5096bcef6084352475.html(转自)

[翻译-Shiro]-集成Apache Shiro到基于Spring的应用

Shiro兼容javabean使得它能很好的与Spring XML或其他基于Spring的配置方式集成。在基于Shiro的应用程序中的SecurityManager是单例的。不过,SecurityMa...
  • ntc10095
  • ntc10095
  • 2016年05月18日 16:19
  • 180

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

Java在最近几年逐渐升温,随着Java SE 5和Java SE 6的推出,Java的未来更显得无比辉煌。但以Java为基础的JSP在Java SE 5推出之前却一直抬不起头来,这最重要的原因就是J...
  • xyl870419
  • xyl870419
  • 2013年12月16日 23:15
  • 313

基础练习 完美的代价

问题描述   回文串,是一种特殊的字符串,它从左往右读和从右往左读是一样的。小龙龙认为回文串才是完美的。现在给你一个串,它不一定是回文的,请你计算最少的交换次数使得该串变成一个完美的回文串。   ...
  • Liukx940818
  • Liukx940818
  • 2015年03月11日 20:41
  • 2496

FZU 2191 完美的数字

Problem 2191 完美的数字 Accept: 50    Submit: 146 Time Limit: 1000 mSec    Memory Limit : 32768 KB  Pr...
  • wr132
  • wr132
  • 2015年05月03日 21:18
  • 617

蓝桥杯 BASIC-19 基础练习 完美的代价

问题描述 回文串,是一种特殊的字符串,它从左往右读和从右往左读是一样的。小龙龙认为回文串才是完美的。现在给你一个串,它不一定是回文的,请你计算最少的交换次数使得该串变成一个完美的回文串。 交换的定...
  • liuchuo
  • liuchuo
  • 2016年07月22日 00:30
  • 741

打造完美的DialogBar

打造完美的DialogBar 打造完美的DialogBar John.Y      DialogBar相比Dialog有很多优势。因CDialogBar继承于CControlBar,因...
  • komtao520
  • komtao520
  • 2015年09月10日 16:38
  • 247

蓝桥杯 完美的代价

分析: 贪心思想,从左向右bi
  • Houheshuai
  • Houheshuai
  • 2014年11月18日 20:51
  • 1723

[BASIC-19] 完美的代价

基础练习 完美的代价   时间限制:1.0s   内存限制:512.0MB 问题描述   回文串,是一种特殊的字符串,它从左往右读和从右往左读是一样的。小龙龙认为回文串才是完美的。现在给你...
  • u011506951
  • u011506951
  • 2014年05月20日 19:13
  • 1245

完美的单例模式

一、立即加载模式(饿汉模式) /** * 立即加载模式(饿汉模式) * * @author LZN * */ public class SingleOne { private sta...
  • LZN51
  • LZN51
  • 2016年09月08日 22:56
  • 397

蓝桥杯 BASIC-19 基础练习 完美的代价 Java版

问题描述   回文串,是一种特殊的字符串,它从左往右读和从右往左读是一样的。小龙龙认为回文串才是完美的。现在给你一个串,它不一定是回文的,请你计算最少的交换次数使得该串变成一个完美的回文串。 交换的定...
  • liuchuo
  • liuchuo
  • 2017年02月24日 01:36
  • 623
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JSP和JSF合并 共同打造完美的Web应用-2
举报原因:
原因补充:

(最多只允许输入30个字)