`

JSF浅尝

    博客分类:
  • JSF
阅读更多
1. 什么是 Java Server Faces(jsf)?

   JSF为JAVA的 Web应用用户界面的开发人员提供了标准的编程接口、丰富可扩展的UI组件库(一个核心的JSP标记库用来处理事件、执行验证以及其他非UI相关的操作和一个标准的HTML 标记库来表示 UI组件)、事件驱动模型等一套完整的Web应用框架,通过 JSF ,您可以在页面中轻松自如地使用 WEB 组件、捕获用户行为所产生的事件、执行验证、建立页面导航…,当使用支持JSF的开发工具来开发 JSF 应用的时候,一切将会变得异常简单,GUI方式拖放组件、修改组件属性、建立组件间关联以及编写事件侦听器等等

   JSF 有三部分:
     一套预制的UI组件集
     一个事件驱动的编程模型
     一个允许第三方开发者提供附加组件的组件模型

   JSF包含处理事件所需的所有代码和组件组织,开发者可以忽略这些细节而专注于应用逻辑。

2. 第一个JSF程序

   JSF只是J2EE的一个标准,是一套接口集和一些基本实现,要使用JSF需要下载jsf的实现,可以到JSF 官方网站的 下载区 下载参考实现,也可以到 apache 下载 myfaces,这里以使用sun的参考实现为例,在下载压缩文件并解压缩之后,将其 lib 目录下的 jar 文件复制至您的Web应用程序的/WEB-INF/lib目录下,另外您还需要 jstl.jar 与 standard.jar 文件,这些文件您可以在 sample 目录下的应用中找到,建好我们的应用目录结构:

   hellojsf
   |-- build.xml
   |-- src
   |-- WEB-INF
   |----|-- web.xml
   |----|-- faces-config.xml
   |----|-- classes
   |----|-- lib
   |----|----|--jsf-impl.jar
   |----|----|--jsf-api.jar
   |----|----|--commons-digester.jar
   |----|----|--commons-collections.jar
   |----|----|--commons-beanutils.jar
   |----|----|--commons-logging.jar
   |----|----|--standard.jar
   |----|----|--jstl.jar

   可能只有faces-config.xml,它是jsf的基本配置文件,后面就可以看到它的作用。

   //build.xml
<project name="helloapp" default="compile" basedir=".">

<!-- ================= Property Definitions ==================== -->
<property name="src.home" value="${basedir}/src" />
<property name="classes.home" value="${basedir}/WEB-INF/classes" />
<property name="lib.home" value="${basedir}/WEB-INF/lib" />

<!-- ================= "compile" Target ==================== -->
<target name="compile">
<javac srcdir="${src.home}" destdir="${classes.home}" debug="on">
  <classpath>
   <fileset dir="${lib.home}">
    <include name="*.jar"/>
   </fileset>
  </classpath>
</javac>
</target>

</project>


   下面我们就开始写程序了,没有什么复杂逻辑,不用细说他的流程,直接写了。

   //hello.jsp 保存在根目录下
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<f:view>
<html>
  <head>
   <title>
   JSF in Action - Hello, world!
   </title>
  </head>
  <body>
   <h:form id="welcomeForm">
    <h:outputText id="welcomeOutput"
     value="Welcome to JavaServer Faces!"
     style="font-family: Arial, sans-serif; font-size: 24;
     color: green;"/>
    <p>
    <h:message id="errors" for="helloInput" style="color: red"/>
    </p>
    <p>
    <h:outputLabel for="helloInput">
     <h:outputText id="helloInputLabel" value="Enter number of controls to display:"/>
    </h:outputLabel>
    <h:inputText id="helloInput" value="#{helloBean.numControls}" required="true">
     <f:validateLongRange minimum="1" maximum="500"/>
    </h:inputText>
    </p>
    <p>
    <h:panelGrid id="controlPanel"
     binding="#{helloBean.controlPanel}"
     columns="20" border="1" cellspacing="0"/>
    </p>
    <h:commandButton id="redisplayCommand" type="submit" value="Redisplay" actionListener="#{helloBean.addControls}"/>
    <h:commandButton id="goodbyeCommand" type="submit" value="Goodbye" action="#{helloBean.goodbye}" immediate="true"/>
   </h:form>
  </body>
</html>
</f:view>

   从这个页面可以看出,jsf 就是用他自己的UI组件代替了html标签,又加了些特有的属性,很容易理解,值得注意的是,所有组件都要定义在<f:view></f:view>之内,熟悉jsp的可能对”#{helloBean.numControls}“感觉很熟悉,不同的是这个是以”#“开头的,”binding“属性的值是个jsf el 表达式,它指定了helloBean类中的controlPanel方法可以直接对此组件进行操作,h:commandButton 是按钮组件,可以产生 action event, 他的 actionListener 属性制定了用helloBean类中的addControls方法来处理这个action event,其他的都比较容易理解,来看下个页面。

   //goodbye.jsp 保存在根目录下
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<f:view>
<html>
  <head>
   <title>
   JSF in Action - Hello, world!
   </title>
  </head>
  <body>
   <h:form id="goodbyeForm">
   <p>
   <h:outputText id="welcomeOutput" value="Goodbye!"
    style="font-family: Arial, sans-serif; font-size: 24;
    font-style: bold; color: green;"/>
   </p>
   <p>
   <h:outputText id="helloBeanOutputLabel" value="Number of controls displayed:"/>
   <h:outputText id="helloBeanOutput" value="#{helloBean.numControls}"/>
   </p>
   </h:form>
  </body>
</html>
</f:view>

   这个页面更简单,只是一些输出。

   在 hello.jsp goodbye.jsp 中都通过 jsf el 表达式引用了一个 backing bean, 叫 helloBean, 他包括了我们这个应用所需的一切

   //HelloBean.java 保存在 src 下
package org.jia.hello;

import javax.faces.application.Application;
import javax.faces.component.html.HtmlOutputText;
import javax.faces.component.html.HtmlPanelGrid;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import java.util.List;

public class HelloBean
{
private int numControls;
private HtmlPanelGrid controlPanel;

public int getNumControls()
{
  return numControls;
}
public void setNumControls(int numControls)
{
  this.numControls = numControls;
}
public HtmlPanelGrid getControlPanel()
{
  return controlPanel;
}
public void setControlPanel(HtmlPanelGrid controlPanel)
{
  this.controlPanel = controlPanel;
}
public void addControls(ActionEvent actionEvent)
{
  Application application = FacesContext.getCurrentInstance().getApplication();
  List children = controlPanel.getChildren();
  children.clear();
  for (int count = 0; count < numControls; count++)
  {
   HtmlOutputText output = (HtmlOutputText)application.createComponent(HtmlOutputText.COMPONENT_TYPE);
   output.setValue(" " + count + " ");
   output.setStyle("color: blue");
   children.add(output);
  }
}
public String goodbye()
{
  return "success";
}
}

   jsf 的 backing bean 很简单,不需要继承于某个特定类,只是一个包含事件处理方法的javabean
 
   这里面最复杂的就是 addControls 方法了,它是一个 action listener 方法,因为他接收了一个唯一的参数 ActionEvent,在 hello.jsp 中:”<h:commandButton id="redisplayCommand" type="submit" value="Redisplay" actionListener="#{helloBean.addControls}"/>“,这句话告诉 jsf,当用户点击"Redisplay"按钮时jsf会用这个方法来处理 action event

   goodbye方法象 addControls 一样,是 event listener 的一种类型,但他是于 jsf 的导航系统联系起来的,所以他的工作就是返回一个字符串或逻辑输出,这样导航系统就可以决定下一个要加载的页面,这一类的方法叫做 action methods. 在 hello.jsp 中:”<h:commandButton id="goodbyeCommand" type="submit" value="Goodbye" action="#{helloBean.goodbye}" immediate="true"/>“,当用户点击”Goodbye“按钮时,goodbye方法会被执行,他只是返回"success",在配置文件中这个输出与某个页面相联系,下面就来看看配置文件faces-config.xml

   //faces-config.xml

<?xml version="1.0"?>
<!DOCTYPE faces-config PUBLIC
"-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.0//EN"
"http://java.sun.com/dtd/web-facesconfig_1_0.dtd">
<faces-config>
<managed-bean>
  <description>The one and only HelloBean.</description>
  <managed-bean-name>helloBean</managed-bean-name>
  <managed-bean-class>org.jia.hello.HelloBean</managed-bean-class>
  <managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<navigation-rule>
  <description>Navigation from the hello page.</description>
  <from-view-id>/hello.jsp</from-view-id>
  <navigation-case>
   <from-outcome>success</from-outcome>
   <to-view-id>/goodbye.jsp</to-view-id>
  </navigation-case>
</navigation-rule>
</faces-config>

   jsf 象大多数框架一样,有一个配置文件,在之中你可以定义 导航规则、初始化javabean、注册你自己的jsf组件、验证器,和一些面向jsf应用其他方面的其他配置
   在这个配置文件中定义了一个bean, 指定了他的名字(这个名字就是我们在页面中使用的名字),类全名,和使用范围。还定义了一个导航规则,hello.jsp有一个”Goodbye“按钮转到其他页,所以只有一个单独的navigation-case,当输出为”success"时,就会显示goodbye.jsp。

   现在我们已经写完了页面,backing bean, 和配置文件,下面写完web.xml后就可以看到效果了

   //web.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<display-name>hello world</display-name>
<description>
  Welcome to JavaServer Faces.
</description>
<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>
<welcome-file-list>
  <welcome-file>faces/hello.jsp</welcome-file>
</welcome-file-list>
</web-app>

   FacesServlet 是做jsf 应用是一定要指定的,还设了默认页为 hello.jsp.

   运行build, 启动web server, 在地址栏中打入应用地址,看到刚刚写的应用了吧,通过实际效果结合代码,相信我们已经对jsf 已经有一个基本认识了。
分享到:
评论

相关推荐

    jsf实例jsf实例 JSF学习 JSF jar包 JSF

    jsf实例 JSF学习 JSF jar包 JSF jsf实例 JSF学习 JSF jar包 JSFjsf实例 JSF学习 JSF jar包 JSF jsf实例 JSF学习 JSF jar包 JSF

    JSF Java Server Faces (JSF)框架

    JSF是一种用于构建Java Web 应用程序的标准框架(是Java Community Process 规定的JSR-127标准)。JSF(Java Server Faces)技术为开发基于网络用户界面的Java开发者提供了标准的编程接口API以及标签库。就像Struts框架...

    jsf第一个例子 jsf架包 jsf实例

    **JSF(JavaServer Faces)** 是一个Java平台上的用户界面框架,用于构建Web应用程序。它为开发人员提供了一种模型-视图-控制器(MVC)架构,简化了前端和后端之间的交互。JSF提供了组件库,使得创建动态、交互式的...

    JSF上传 JSF大文件上传 JSF上传代码 JSF上传源代码

    JSF(JavaServer Faces)是Java平台上用于构建用户界面的Web框架,尤其在处理表单和数据交互方面表现强大。本项目聚焦于JSF的文件上传功能,特别是针对大文件的上传,允许用户上传最大可达1.99GB的文件。在实际应用...

    《JSF_实战》非常好的JSF学习书

    《JSF_实战》非常好的JSF学习书《JSF_实战》非常好的JSF学习书《JSF_实战》非常好的JSF学习书《JSF_实战》非常好的JSF学习书《JSF_实战》非常好的JSF学习书《JSF_实战》非常好的JSF学习书《JSF_实战》非常好的JSF...

    JSF中文教程jsf

    **JSF(JavaServer Faces)** 是一个Java平台上的用户界面框架,用于构建Web应用程序。它简化了开发人员创建交互式、数据驱动的Web界面的过程。JSF提供了一个组件模型,允许开发者通过拖放组件的方式来构建用户界面...

    JSF入门+JSF web实战+JSF2

    JavaServer Faces(JSF)是Java平台上的一种用于构建Web应用程序的MVC(Model-View-Controller)框架。它提供了一种声明式的方式来构建用户界面,简化了开发过程,并且与Java EE平台无缝集成。本系列资料包括《JSF...

    JSF的工作方式 JSF架构 JSF模型 JSF事件类型

    JavaServer Faces (JSF) 是一个用于构建用户界面的Java Web框架,它简化了创建和维护Web应用程序的复杂性。JSF的核心理念是提供一种组件化的编程模型,将UI元素与业务逻辑分离,使得开发者可以专注于应用的逻辑部分...

    JSF包,jsf包,JSF包,jsf包

    **JSF(JavaServer Faces)** 是一种Java平台上的Web应用程序开发框架,它提供了一种组件化和事件驱动的方式来创建用户界面。JSF的核心概念包括组件、事件、渲染器和生命周期,这些元素共同构建了一个强大的MVC...

    jsf分页 jsf分页 jsf分页

    在JavaServer Faces (JSF)框架中,分页是一种常用的技术,用于处理大量数据时提供更好的用户体验。当数据集过大,一次性加载所有记录到页面上会导致性能下降且用户界面响应变慢。通过分页,我们可以将数据分成多个...

    JSF全套(JSF入门教+ LIB+ Ajax4JSF使用手册 )

    JavaScript Faces (JSF) 是Java平台上的一种用于构建用户界面的模型-视图-控制器(MVC)框架,它简化了Web应用程序的开发。本资源包包含了JSF从入门到进阶的多个方面,包括基础教程、核心组件库(LIB)、Ajax4JSF的使用...

    core jsf 1.2 jsf 核心

    **JSF 1.2核心详解** JavaServer Faces (JSF) 是Java平台上的一个用于构建用户界面的组件模型框架,特别适用于Web应用程序的开发。JSF 1.2是该框架的一个重要版本,它在JSF 1.1的基础上进行了一系列的改进和增强,...

    开发JSF所需要的jar包

    JavaServer Faces(JSF)是Java平台上的一种用于构建Web应用程序的MVC(Model-View-Controller)框架。它提供了一种组件化的方式来构建用户界面,简化了前后端交互的复杂性。在JSF中,开发者可以使用声明式编程模型...

    JSF开发必备JAR

    ================================= JSF开发必备JAR ================================= &lt;br&gt;《JSF入门简单中文版》开篇提到JSF开发需要的jar,' 但是按其中提供的方法: &lt;br&gt;jstl.jar 与 ...

    JSF帮助文档

    JavaScript Faces (JSF) 是Java平台上用于构建企业级Web应用程序的一种服务器端的用户界面框架。JSF 是Java Community Process (JCP) 规范的一部分,最初由Sun Microsystems开发,现在由Oracle公司维护。JSF的核心...

    JSF与hibernate整合的登陆

    **JSF(JavaServer Faces)** 是Java平台上的一种用于构建用户界面的Web应用程序框架,它简化了开发人员创建和管理动态Web用户界面的过程。JSF提供了组件库、事件处理机制和生命周期管理,允许开发者通过声明式的...

    jsf-api-2.0.3.jar.zip_jsf api_jsf jar包_jsf-api-2.0.3.jar_jsf-api

    JSF(JavaServer Faces)是Java平台上的一种用于构建用户界面的MVC(Model-View-Controller)框架。它提供了一种声明式的方式来创建Web应用程序,允许开发者通过组件和事件处理来构建用户界面,而无需深入HTML和...

    jsf入门列子和jsf与Tiles结合

    JavaServer Faces (JSF) 是一个用于构建用户界面的Java框架,主要应用于Web应用程序开发。JSF基于模型-视图-控制器(MVC)架构,提供了丰富的组件库和生命周期管理,使得开发者能够更加便捷地创建动态、数据驱动的...

    jsf视频jsf视频0

    jsf 视频 java faces jsf 视频 java faces jsf 视频 java faces

Global site tag (gtag.js) - Google Analytics