大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。
什么是
JSF
:
JSF
体系结构:
(MVC) 设计模式的框架。用户界面代码(视图)与应用程序数据和逻辑(模型)的清晰分离使 JSF 应用程序更易于管理。为了准备提供页面相应用程序数据訪问的 JSF 上下文和防止对页面未授权或不对的訪问,全部与应用程序的用户交互均由一个前端FacesServlet(控制器)来处理。
JSF
生命周期:
JSF 生命周期(规定了用户请求之间的整个事件流)的范围内工作。
阶段
|
说明
|
恢复视图
|
为选定的视图找到或创建组件树。
一旦用户单击JSP页面上的链接或button,就会启动此阶段。JSF应用里的JSP页面被表示成一个组件树。JSF实现会进一步将这些组件链接到事件处理程序和验证程序,并将视图保存在FacesContext对象中,以备后面的处理过程所用。FacesContext对象包括了JSF用来管理当前会话中当前请求的GUI组件状态所须要的全部状态信息。
|
应用请求值
|
使用请求中发送来的值来更新组件树的组件值。由于请求中发送来的值都是String类型的,所以在更新组件树的组件值之前,必须将这些值转换为对应类型。这个过程也是解码。若转换有错误,这些错误将加入�到FacesContext对象。
|
处理验证
|
当每一个组件的本地值被更新后,Lifecycle对象都会依据这些注冊组件的验证规则来验证这些值的合法性。
假设输入的值不符合验证规则,就会将验证错误加入�至FacesContext对象,并将组件标记为无效。JSF将转至呈现响应阶段,并显示带有验证错误消息的视图。
假设没有遇到验证错误,JSF将进入下一阶段。
|
更新模型值
|
更新与组件相关的后台bean(也叫管理bean)或者模型对象的值。仅仅有那些与组件值绑定在一起的Bean属性才会被更新。
|
调用应用程序
|
JSF控制器调用应用程序来处理应用程序级的事件,如提交一个表单。(此阶段可运行业务逻辑)
|
呈现响应
|
使用当前的显示技术(如JSP)显示选定的视图。
|
设置
JSF
环境:
<?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;
}
}
|
Bean
充当控制器的角色:通常它包括想要从用户处收集的属性,以及处理这些属性、操纵UI和运行其它一些应用处理的监听器方法。即它接收用户提交的数据,然后调用对应的模型的业务方法来处理用户的请求。
<?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>
</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>
</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>
|
JSF
的用户界面组件模型:
<%@ 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>
|
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/118486.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...