`
foryougeljh
  • 浏览: 116500 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

JSF入门

 
阅读更多

JSF需要的jar文件
jsf-impl.jar jsf-api.jar commons-digester.jar commons-collections.jar commons-beanutils.jar jstl.jar
standard.jar

web.xml配置jsf servlet

<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- Faces Servlet Mapping -->
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.faces</url-pattern>
</servlet-mapping>

<!--配置文件路径 -->
<context-param>
<param-name>javax.faces.CONFIG_FILES</param-name>
<param-value>/WEB-INF/faces-beans.xml,/WEB-INF/faces-navigation.xml</param-value>
</context-param>

上面的定义们将所有.faces 的请求交由 FaceServlet 来处理,FaceServlet 会唤起相对的.jsp 网页,例如请求是/index.faces 的话,则实际上会唤起/index.jsp 网页,完成以上的配置,您就可以开始使用 JSF了。

JSF预设会读取faces-config.xml中关于Bean的定义,如果想要自行设置定义档的名称,我们是在web.xml中提供javax.faces.CONFIG_FILES参数,例如:
<context-param>
<param-name>javax.faces.CONFIG_FILES</param-name>
<param-value>/WEB-INF/beans.xml</param-value>
</context-param>
配置文件可以有多个,中间以 "," 区隔,例如:/WEB-INF/navigation.xml,/WEB-INF/beans.xml

JSF配置文件
<?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>
<navigation-rule>
<from-view-id>/pages/index.jsp</from-view-id>
<navigation-case>
<from-outcome>login</from-outcome>
<to-view-id>/pages/welcome.jsp</to-view-id>
</navigation-case>
</navigation-rule>

<managed-bean>
<managed-bean-name>user</managed-bean-name>
<managed-bean-class>
onlyfun.caterpillar.UserBean
</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
</faces-config>


<navigation-rule>定义了页面流程,当请求来自<from-view-id>中指定的页面,并且指定了<navigation-case>中的<from-outcome>为login时,则会将请求导向至<to-view-id>所指定的页面

<managed-bean>用来统一管理Bean
<h:commandButton value="送出" action="#{user.verify}"/>
action属性指定根据verify方法的返回值来导航页面

对于JSF,每一个视图(View)都有一个独特的标识(identifier),称之为View ID ,设定时都是以/作为开头,如果您请求时的路径是/pages/index.faces,则JSF会将副文件名改为/pages/index.jsp,以此作为view-id。

<from-view-id>代表请求的页面,

<to-view-id>代表返回的页面,

<from-outcome>既可以代表页面配置的action的值,也可以是ManagedBean中action方法返回的字符串。

如果页面上<h:commandButton> 的action是一个EL表达式,则<from-outcome>代表的是action方法返回的字符串。
还可以加入<from-action>, 进一步规范表单结果必须根据哪一个动作方法(action method)
例如:<from-action>#{user.verify}</from-action>


在导航时,预定义都是使用forward的方式,在<navigation-case>中加入一个<redirect/>


表单元素和JavaScript
要在javascript中取得<h:form>包含的JSF组件的信息,可以在<h:form>标签上定义id属性
此时<h:form>包含的JSF组件的id为(<h:form>的id属性值)+":"+(JSF组件id属性值)
例如:
<h:form id="test">
<h:inputText value="#{user.userInfo.username}" id="username"/>
</h:form>
输入框的id为test:username


JSF表达式语言
JSF EL是以#开始,将变量或运算式放置在 { 与 } 之间
变量名称如果是Bean的话,可以通过使用 '.'导航

JSF所提供的隐含对象,大致上对应于JSP隐含对象
不过JSF隐含对象移除了pageScope与pageContext。而增加了facesContext与view,它们分别对应于 javax.faces.context.FacesContext与javax.faces.component.UIViewRoot。

对于Map类型对象,我们可以使用 '.' 运算符指定key值来取出对应的value,也可以使用 [ 与 ] 来指定
例如:
<f:view>
<b> 您好, <h:outputText value="#{param['name']}"/> </b>
</f:view>
如果变量是List类型或数组的话,则可以在 [] 中指定索引
<f:view>
<h:outputText value="#{someBean.someList[0]}"/>
<h:outputText value="#{someBean.someArray[1]}"/>
</f:view>
JSF表达式也可以指定字面常数,对于true、false、字符串、数字,JSF EL会尝试进行转换
如果要输出字符串,必须以单引号 ' 或双引号 " 括住,如此才不会被认为是变量名称

JSF国际化
资源文件名称由basename加上语言与地区来组成
basename.properties ,basename_en.properties, basename_zh_CN.properties
没有指定语言与地区的basename是预定义的资源文件名称,JSF会根据浏览器送来的Accept-Language header中的内容来决定该使用哪一个资源文件名称
例如: Accept-Language: zh_CN, en-US, en
如果浏览器送来这些header,则预定义会使用简体中文,接着是美式英文,再来是英文语系,如果找不到对应的信息资源文件,则会使用预定义的信息资源文件(信息资源文件必须是ISO-8859-1编码,可以用JDK的native2ascii来转换)
使用<f:loadBundle>标签来指定载入信息资源
例如:
<f:loadBundle basename="messages" var="msgs"/>
<h:outputText value="#{msgs.titleText}"/>

也可以在faces-config.xml中设定语系
<application>
<local-config>
<default-locale>en</default-locale>
<supported-locale>zh_CN</supported-locale>
</local-config>
</application>
<local-config>一定有一个<default-locale>

在页面中设定一个表单,可以让使用者选择语系,例如设定单选钮
<f:view locale="#{user.locale}">
<f:loadBundle basename="messages" var="msgs"/>
<h:selectOneRadio value="#{user.locale}">
<f:selectItem itemValue="zh_CN" itemLabel="#{msgs.zh_CNText}"/>
<f:selectItem itemValue="en" itemLabel="#{msgs.enText}"/>
</h:selectOneRadio>


JSF 使用 Bean 来达到逻辑层与表现层分离的目的,Bean 的管理集中在配置文件中,您只要修改配置文件,就可以修改 Bean 之间的相依关系。
<managed-bean-class>设定所要使用的Bean类
<managed-bean-name>设定之名称,可供我们在JSF表达式语言使用
<managed-bean-scope>设定Bean的存活范围,您可以设定为request、session 与application
还可以将存活范围设定为none, 当设定为none时会在需要的时候生成一个新的Bean,例如您在一个method中想要生成一个临时的Bean,就可以将之设定为none。
要注意的是,JSF的标签上的属性设定时,只接受JSF表示语言

配置bean的依赖关系

如果要在其它类别中取得Bean对象,则可以先取得javax.faces.context.FacesContext,它代表了JSF目前的执行的环境物件,接着尝试取得javax.faces.el.ValueBinding物件,从中取得指定的Bean对象
FacesContext context = FacesContext.getCurrentInstance();
ValueBinding binding = context.getApplication().createValueBinding("#{user}");
UserBean user = (UserBean) binding.getValue(context);

如果只是要尝试取得Bean的某个属性,则可以如下:
FacesContext context = FacesContext.getCurrentInstance();
ValueBinding binding = context.getApplication().createValueBinding("#{user.name}");
String name = (String) binding.getValue(context);

如果有必要在启动Bean时,自动设置属性的初始值,则可以如下设定
<managed-bean>
<managed-bean-name>user</managed-bean-name>
<managed-bean-class>
onlyfun.caterpillar.UserBean
</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
<managed-property>
<property-name>name</property-name>
<value>caterpillar</value>
</managed-property>
<managed-property>
<property-name>password</property-name>
<value>123456</value>
</managed-property>
</managed-bean>
如果要设定属性为 null 值,则可以使用<null-value/>标签,例如:
<managed-property>
<property-name>name</property-name>
<null-value/>
</managed-property>
<managed-property>
<property-name>password</property-name>
<null-value/>
</managed-property>

您也可以将其它的Bean设定给另一个Bean的属性
<managed-bean>
<managed-bean-name>user</managed-bean-name>
<managed-bean-class>
onlyfun.caterpillar.UserBean
</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>

<managed-bean>
<managed-bean-name>other</managed-bean-name>
<managed-bean-class>
onlyfun.caterpillar.OtherBean
</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
<managed-property>
<property-name>user</property-name>
<value>#{user}</value>
</managed-property>
</managed-bean>
在OtherBean中的user属性,接受一个UserBean对象,我们设定前一个名称为user的UserBean对象。

您的Bean上有接受List或Map型态的属性,则您也可以在组态档案中直接设定属些属性的值
<managed-bean>
<managed-bean-name>someBean</managed-bean-name>
<managed-bean-class>
onlyfun.caterpillar.SomeBean
</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>

<managed-property>
<property-name>someProperty</property-name>
<list-entries>
<value-class>java.lang.Integer</value-class>
<value>1</value>
<value>2</value>
<value>3</value>
</list-entries>
</managed-property>

<managed-property>
<property-name>someProperty</property-name>
<map-entries>
<value-class>java.lang.Integer</value-class>
<map-entry>
<key>someKey1</key>
<value>100</value>
</map-entry>
<map-entry>
<key>someKey2</key>
<value>200</value>
</map-entry>
</map-entries>
</managed-property>

</managed-bean>

分享到:
评论

相关推荐

    清晰版--JSF入门.pdf

    ### JSF入门知识点详解 #### 一、JSF概述 **1.1 简介JSF** JavaServer Faces (JSF) 是一种基于Java的标准技术,用于构建企业级Web应用。JSF的设计目的是简化Web应用程序的开发过程,通过封装HTTP协议的复杂性,...

    JSF入门+JSF web实战+JSF2

    本系列资料包括《JSF入门》、《JSF Web应用实战开发》和《JSF2》,旨在帮助初学者快速掌握JSF的核心概念和技术。 《JSF入门简体中文版》是学习JSF的基础,它涵盖了JSF的基本架构、组件库、生命周期和事件处理等方面...

    JSF入门与标签_JSF入门与标签.

    下面将详细介绍JSF入门、JSF的主要特点以及JSF中的标签使用。 一、JSF入门 JSF入门涉及理解其基本架构和工作流程。JSF应用通常由以下部分组成: 1. **Facelets**: Facelets是JSF的默认视图描述语言,用于构建用户...

    JSF入门必读——JSF入门基础

    1. JSF入门 JSF的基础在于它的组件模型,这些组件可以直接映射到HTML元素,并且可以处理用户的输入。JSF提供了丰富的UI组件库,如按钮、表单、文本框等,开发者可以通过声明式的方式在页面上使用这些组件。 开发...

    值得看的jsf入门教程

    JavaScript全名JavaServer Faces(JSF)是一种基于Java的服务器端Web应用程序开发框架,由Sun Microsystems(现已被Oracle收购)开发。它旨在简化用户界面组件的构建和管理,为开发者提供一套面向对象的API,使其...

    JSF入门级教程

    本教程旨在帮助初学者快速入门JSF,掌握其基本概念、架构和常用功能。 一、JSF概述 JSF是Java Community Process(JCP)制定的标准之一,它基于Model-View-Controller(MVC)设计模式,为Java EE平台提供了丰富的UI...

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

    1. **JSF入门教程**:JSF的基础知识讲解,涵盖了JSF的基本概念、架构和工作原理。这个部分将教你如何配置JSF环境,创建第一个JSF应用,理解JSF生命周期,以及认识JSF的核心组件如输入字段、按钮、表单等。通过这个...

    JSF入门深入学习WORD版

    资源名称:JSF入门深入学习 WORD版内容简介:本文档主要讲述的是JSF入门深入学习;JSF为JAVA的 Web应用用户界面的开发人员提供了标准的编程接口、丰富可扩展的UI组件库(一个核心的JSP标记库用来处理事件、执行验证...

    JSF入门简单中文版

    javaServer+Faces入门简单中文版

    JSF入门(中文pdf)

    本资源提供了一份详细的JSF入门中文PDF教程,旨在帮助初学者快速理解并掌握JSF的核心概念和基本用法。 JSF的核心理念在于简化Java Web开发,通过组件化的方式将界面、业务逻辑和数据模型进行解耦。在JSF中,UI组件...

    JSF入门.zip

    "JSF入门文档"很可能是包含JSF基础教程、组件使用示例、配置指南等内容的资源集合,可以帮助初学者快速掌握JSF的基本概念和用法。文档可能包括以下部分: 1. JSF简介:介绍JSF的历史、目标和基本原理。 2. 安装与...

    jsf入门+标签

    ### JSF入门 JSF的核心概念是组件模型,它将网页元素如按钮、文本框等视为可复用的组件。这些组件可以独立于视图层逻辑进行管理,提高了开发效率和代码的可维护性。JSF使用XML格式的文件(Faces Config)来配置和...

    jsf入门简体中文

    对于初学者,可以通过阅读《JSF入门》这样的书籍或在线教程,快速掌握JSF的基本用法和概念。同时,社区如Stack Overflow、Java EE官方文档以及各种开源项目,都是学习JSF的好去处。 总结,JSF作为Java EE的重要组成...

    jsf入门列子和jsf与Tiles结合

    在上述的JSF入门例子中,我们首先看到的是`UserBean.java`,这是个简单的实体类,模拟了用户登录的情景。它包含了用户名`name`、密码`password`以及错误消息`errMessage`等属性,并提供了相应的getter和setter方法。...

    jsf入门教程中文版

    jsf入门教程jsf入门教程jsf入门教程jsf入门教程jsf入门教程jsf入门教程jsf入门教程jsf入门教程jsf入门教程jsf入门教程jsf入门教程jsf入门教程jsf入门教程jsf入门教程jsf入门教程jsf入门教程jsf入门教程jsf入门教程

Global site tag (gtag.js) - Google Analytics