jsf入门实例

来源:互联网 发布:矩阵乘以矩阵的转置 编辑:程序博客网 时间:2024/06/01 13:59

百科上定义:引入了基于组件和事件驱动的开发模式,使开发人员可以使用类似于处理传统界面的方式来开发Web应用程序。提供了行为与表达的清晰分离。 不用特别的脚本语言或者标记语言来连接UI组件和Web层。JSF技术API被直接分层在Servlet API的顶端。 技术为管理组件状态提供一个丰富的体系机构、处理组件数据、确认用户输入和操作事件。

如果之前使用过Struts或者SpringMVC那么就应该很清楚JavaEE的前端框架都需要一个“入口”,要么这个入口是拦截器(Struts2)要么是Servlet(Struts,SpringMVC)。JSF也不例外,FacesServlet就是这个“入口”,jsf更像Struts。

1. 当JSF页面上的一个事件发生时(比如:用户单击了一个按钮),事件通知通过HTTP发往服务器。服务器端使用FacesServet这个特殊的Servlet处理该通知。
2. FacesServlet一接收到用户的请求就创建一个FacesContext对象(JSF上下文,它存放了应用程序的所有数据)。在处理过程中,主要修改的就是这个FaceContext对象。
3. 接着就是处理过程,处理器是一个叫作Lifecycle的对象。FacesServet把控制权转交给Lifecycle对象。该对象分阶段来处理FacesContext对象以生成响应,最后将响应发回客户端。

入门实例如下:
web.xml

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  <!-- 该参数配置使用指定JSF配置文件所在的位置 -->  <context-param>    <param-name>javax.faces.CONFIG_FILES</param-name>    <param-value>/WEB-INF/faces-config.xml</param-value>  </context-param>  <!-- 该servlet用来配置JSF的前端控制器, -->  <servlet>    <servlet-name>Faces Servlet</servlet-name>    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>    <load-on-startup>0</load-on-startup>  </servlet>  <!-- 该servlet-mapping用来配置对哪些请求需要交由上面所配置的servlet -->  <servlet-mapping>    <servlet-name>Faces Servlet</servlet-name>    <url-pattern>*.faces</url-pattern>  </servlet-mapping>  <welcome-file-list>    <welcome-file>index.jsp</welcome-file>  </welcome-file-list></web-app>

faces-config.xml

<?xml version='1.0' encoding='UTF-8'?><faces-config xmlns="http://java.sun.com/xml/ns/javaee"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"    version="1.2">    <managed-bean>        <managed-bean-name>UserNumberBean</managed-bean-name>        <managed-bean-class>            org.chen.controller.UserNumberBean        </managed-bean-class>        <managed-bean-scope>session</managed-bean-scope>    </managed-bean>    <navigation-rule>        <!-- from-view-id指定跳转的起点 -->        <from-view-id>/greeting.jsp</from-view-id>        <navigation-case>            <from-outcome>result</from-outcome><!--字符串导航-->            <to-view-id>/response.jsp</to-view-id>        </navigation-case>    </navigation-rule></faces-config>

UserNumberBea.java

package org.chen.controller;import java.util.Random;/** * @author chen * @version 1.0 *  */public class UserNumberBean {    private Integer randomInt = null;    private Integer userNumber = null;    private String response = null;    private long maximum = 10;    private long minimum = 0;    public UserNumberBean() {        Random randomGR = new Random();        randomInt = new Integer(randomGR.nextInt(10));        System.out.println("Duke's number: " + randomInt);    }    public String check() {        if ((userNumber != null) && (userNumber.compareTo(randomInt) == 0)) {            this.response = "恭喜你,你猜对了!";        } else {            if(userNumber > randomInt){                this.response = "你猜大了,请猜小一些!";            }else{                this.response = "你猜小了,请猜大一些!";            }        }        return "result";    }    public void setUserNumber(Integer user_number) {        userNumber = user_number;    }    public Integer getUserNumber() {        return userNumber;    }    public long getMaximum() {        return (this.maximum);    }    public void setMaximum(long maximum) {        this.maximum = maximum;    }    public long getMinimum() {        return (this.minimum);    }    public void setMinimum(long minimum) {        this.minimum = minimum;    }    public String getResponse() {        return response;    }    public void setResponse(String response) {        this.response = response;    }}

greeting.jsp

<%@ page language="java" pageEncoding="GB18030"%><%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %><%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head></head>  <!-- 该页面用来提示用户输入数字, --><body>    <f:view>        <!-- 该标签用来生成一个html中的表单 -->        <h:form>        <!-- 该标签用来生成一个html中的label,value属性用来指定该label的内容 -->        <!-- jsf表达式以 -->           请输入一个从<h:outputLabel value="#{UserNumberBean.minimum}"/><h:outputLabel value="#{UserNumberBean.maximum}"/>范围的数字<br/>           <!--  输入标签的value属性用来指定把用户输入的信息存放到那个位置上 -->           <h:inputText id="userNmuber" value="#{UserNumberBean.userNumber}">             <f:validateLongRange minimum="#{UserNumberBean.minimum}"              maximum="#{UserNumberBean.maximum}"></f:validateLongRange>           </h:inputText><br/>           <h:commandButton value="提交" action="#{UserNumberBean.check}"/>           <h:message for="userNmuber"></h:message>        </h:form>    </f:view></body></html>

response.jsp

<%@ page language="java" pageEncoding="GB18030"%><%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %><%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head></head><body>    <f:view>        <h:outputLabel value="#{UserNumberBean.response}"/>    </f:view></body></html>
原创粉丝点击