JSF简单介绍
|
阶段
|
说明
|
|
恢复视图
|
为选定的视图找到或创建组件树。
一旦用户单击JSP页面上的链接或button,就会启动此阶段。JSF应用里的JSP页面被表示成一个组件树。JSF实现会进一步将这些组件链接到事件处理程序和验证程序,并将视图保存在FacesContext对象中,以备后面的处理过程所用。FacesContext对象包括了JSF用来管理当前会话中当前请求的GUI组件状态所须要的全部状态信息。
|
|
应用请求值
|
使用请求中发送来的值来更新组件树的组件值。由于请求中发送来的值都是String类型的,所以在更新组件树的组件值之前,必须将这些值转换为对应类型。这个过程也是解码。若转换有错误,这些错误将加入到FacesContext对象。
|
|
处理验证
|
当每一个组件的本地值被更新后,Lifecycle对象都会依据这些注冊组件的验证规则来验证这些值的合法性。
假设输入的值不符合验证规则,就会将验证错误加入至FacesContext对象,并将组件标记为无效。JSF将转至呈现响应阶段,并显示带有验证错误消息的视图。
假设没有遇到验证错误,JSF将进入下一阶段。
|
|
更新模型值
|
更新与组件相关的后台bean(也叫管理bean)或者模型对象的值。仅仅有那些与组件值绑定在一起的Bean属性才会被更新。
|
|
调用应用程序
|
JSF控制器调用应用程序来处理应用程序级的事件,如提交一个表单。(此阶段可运行业务逻辑)
|
|
呈现响应
|
使用当前的显示技术(如JSP)显示选定的视图。
|
|
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">
<display-name>guessNumber</display-name>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.faces</url-pattern>
</servlet-mapping>
</web-app>
|
|
package chapter5;
import java.util.Random;
public class UserNumberBean {
/** 用户输入的数字 */
private int userNumber = 0;
/** 正确答案数字 */
private int keyNumber = 0;
/** 最小值 */
private int minNum = 0;
/** 最大值 */
private int maxNum = 10;
/** 回应客户的信息字符串 */
private String responseStr;
public UserNumberBean() {
Random random = new Random();
keyNumber = random.nextInt(10);
System.out.println("正确数字是:" + keyNumber);
}
public int getUserNumber() {
return userNumber;
}
public int getKeyNumber() {
return keyNumber;
}
public int getMaxNum() {
return maxNum;
}
public int getMinNum() {
return minNum;
}
public String getResponseStr() {
if(userNumber == keyNumber){
return "您真聪明,您猜对了!";
}else{
return "对不起,您猜错了!不是"+ userNumber +"!";
}
}
public void setUserNumber(int userNumber) {
this.userNumber = userNumber;
}
public void setKeyNumber(int keyNumber) {
this.keyNumber = keyNumber;
}
public void setMaxNum(int maxNum) {
this.maxNum = maxNum;
}
public void setMinNum(int minNum) {
this.minNum = minNum;
}
public void setResponseStr(String responseStr) {
this.responseStr = responseStr;
}
}
|
|
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE faces-config PUBLIC
"-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN"
"http://java.sun.com/dtd/web-facesconfig_1_1.dtd">
<faces-config xmlns="http://java.sun.com/JSF/Configuration">
<managed-bean>
<managed-bean-name[q1] >UserNumberBean</managed-bean-name>
<managed-bean-class[q2] >chapter5.UserNumberBean</managed-bean-class>
<managed-bean-scope[q3] >session</managed-bean-scope>
</managed-bean>
</faces-config>
|
|
<%@ page contentType="text/html; charset=GBK" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<html>
<head>
<title>猜数字</title>
</head>
<body bgcolor="#ffffff">
<f:view>
<h:form id="helloForm">
<h2>请猜一个<h:outputText value="#{UserNumberBean.minNum}" />
至<h:outputText value="#{UserNumberBean.maxNum}" />的数字</h2>
<h:inputText id="userNo"
value="#{UserNumberBean.userNumber}">
<f:validateLongRange minimum="#{UserNumberBean.minNum}"
maximum="#{UserNumberBean.maxNum}" />
</h:inputText>
<h:commandButton id="submit" action="success" value="提交" />
<br/>
<h:message style="color:red;" id="errors1" for="userNo"/>
</h:form>
</f:view>
</body>
</html>
|
|
<%@ page contentType="text/html; charset=GBK" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<html>
<head>
<title>结果</title>
</head>
<body bgcolor="#ffffff">
<f:view>
<h:form id="responseForm">
<h2>
<h:outputText id="result" value="#{UserNumberBean.responseStr}" />
</h2>
<h:commandButton id="back" value="返回" action="success" />
</h:form>
</f:view>
</body>
</html>
|
|
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE faces-config PUBLIC "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN" "http://java.sun.com/dtd/web-facesconfig_1_1.dtd">
<faces-config xmlns="http://java.sun.com/JSF/Configuration">
<managed-bean>
<managed-bean-name>UserNumberBean</managed-bean-name>
<managed-bean-class>chapter5.UserNumberBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<navigation-rule>
<from-view-id[q4] >/guess.jsp</from-view-id>
<from-outcome[q6] >success</from-outcome>
<to-view-id[q7] >/response.jsp</to-view-id>
</navigation-case>
</navigation-rule>
<navigation-rule>
<from-view-id>/response.jsp</from-view-id>
<navigation-case>
<from-outcome>success</from-outcome>
<to-view-id>/guess.jsp</to-view-id>
</navigation-case>
</navigation-rule>
</faces-config>
|
|
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
|
|
<h:inputText id="userNo" value="#{UserNumberBean.userNumber}">
<f:validateLongRange minimum="#{UserNumberBean.minNum}"
maximum="#{UserNumberBean.maxNum}" />
</h:inputText>
|
JSF简单介绍的更多相关文章
- Freemarker概念简单介绍
Freemarker概念简单介绍 1. Freemarker是什么 模板引擎:一种基于模板的,用来生成输出文本的通过工具. 基于java开发包和类库 2. Freemarker能做什么 MVC ...
- [原创]关于mybatis中一级缓存和二级缓存的简单介绍
关于mybatis中一级缓存和二级缓存的简单介绍 mybatis的一级缓存: MyBatis会在表示会话的SqlSession对象中建立一个简单的缓存,将每次查询到的结果结果缓存起来,当下次查询的时候 ...
- 利用Python进行数据分析(7) pandas基础: Series和DataFrame的简单介绍
一.pandas 是什么 pandas 是基于 NumPy 的一个 Python 数据分析包,主要目的是为了数据分析.它提供了大量高级的数据结构和对数据处理的方法. pandas 有两个主要的数据结构 ...
- 利用Python进行数据分析(4) NumPy基础: ndarray简单介绍
一.NumPy 是什么 NumPy 是 Python 科学计算的基础包,它专为进行严格的数字处理而产生.在之前的随笔里已有更加详细的介绍,这里不再赘述. 利用 Python 进行数据分析(一)简单介绍 ...
- yii2的权限管理系统RBAC简单介绍
这里有几个概念 权限: 指用户是否可以执行哪些操作,如:编辑.发布.查看回帖 角色 比如:VIP用户组, 高级会员组,中级会员组,初级会员组 VIP用户组:发帖.回帖.删帖.浏览权限 高级会员组:发帖 ...
- angular1.x的简单介绍(二)
首先还是要强调一下DI,DI(Denpendency Injection)伸手获得,主要解决模块间的耦合关系.那么模块是又什么组成的呢?在我看来,模块的最小单位是类,多个类的组合就是模块.关于在根模块 ...
- Linux的简单介绍和常用命令的介绍
Linux的简单介绍和常用命令的介绍 本说明以Ubuntu系统为例 Ubuntu系统的安装自行百度,或者参考http://www.cnblogs.com/CoderJYF/p/6091068.html ...
- iOS-iOS开发简单介绍
概览 终于到了真正接触IOS应用程序的时刻了,之前我们花了很多时间去讨论C语言.ObjC等知识,对于很多朋友而言开发IOS第一天就想直接看到成果,看到可以运行的IOS程序.但是这里我想强调一下,前面的 ...
- iOS开发多线程篇—多线程简单介绍
iOS开发多线程篇—多线程简单介绍 一.进程和线程 1.什么是进程 进程是指在系统中正在运行的一个应用程序 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内 比如同时打开QQ.Xcod ...
随机推荐
- Xmemcached
http://blog.csdn.net/yuwenruli/article/details/8478201
- USB interrupt传输和isochronous传输的区别
一直没理解USB的iso传输和interrupt传输的区别. 后来仔细看了下USB2.0 SPEC后才明白. interrupt传输和iso传输,都是等时的传输,也就是某个时间间隔发送一次. 区别在于 ...
- NFC协议学习分享
很多同学在学习NFC协议的时候,觉得NFC的规范从底层到上层的应有尽有,有点无处下手的感觉.这里就和大家分享下我曾经学习NFC规范的经验.如果有不对的地方,也请各位同学批评指正.NFC Forum中有 ...
- Android ListView A~Z快速索引(改进版)
上一篇文章虽然实现了ListView 快速索引的效果,但是有一个小小的Bug.这个Bug我在前面也说了,这篇文章就来解决这个Bug. 我研究的时候发现只要showBg值为true,中间的字母就显示,而 ...
- Android中绘制圆角矩形图片及任意形状图片
圆角矩形图片在苹果的产品中很流行,相比于普通的矩形,很多人都喜欢圆角矩形的图片,因为它避开了直角的生硬,带来更好的用户体验,下面是几个设计的例子: 下面在Android中实现将普通的矩形图片绘制成圆角 ...
- Bellman 算法
这道题目事实上就是在求有没有正环.与求负环的差别就是要不断的更新值,可是这个值要变大.而不是变小. Currency Exchange Time Limit: 1000MS Memory Limi ...
- Error in invoking target 'agent nmhs' of makefile
安装Oracle11g报错:Error in invoking target 'agent nmhs' of makefile 解决方法:cd $ORACLE_HOME/sysman/libvi i ...
- Centos升级gcc4.4.7升级gcc4.8手记
本博客来自:http://www.mudbest.com/centos%E5%8D%87%E7%BA%A7gcc4-4-7%E5%8D%87%E7%BA%A7gcc4-8%E6%89%8B%E8%AE ...
- JAVA Socket获取服务端信息
1.Socket.getInetAddress(),获取服务端地址. 2.Socket.getPort(),获取服务端端口.
- [jQuery]无法获取隐藏元素(display:none)宽度(width)和高度(height)的新解决方案
在做茶城网改版工作的时候,又遇到一个新问题,我需要用jQuery写一个通过点击左右图标来翻阅图片的小插件,写好后测试可以正常运行,但是放到Tab中后发现只有第一个Tab中的代码能够正常运行,其它全部罢 ...