JavaEE学习笔记之JSF(一)

一、JSF

古时候有一句话:知其然知其所以然。意思就是知道事物的表面现象,也知道事物的本质及其产生的原因。

那么,JSF在表面上以及本质上是什么东西呢?为什么会有JSF呢?

个人认为JSF(JavaServer Faces)从名字上来看,是一种Java服务Face的集合,不知道Face翻译成什么比较好,但是大概要表达的意思应该是一种用于与客户端交互的页面。在学习JSP与Servlet的时候,已经学过了,JSP主要的作用就是与客户端交互的,为什么还要用JSF?这也真是JSF出现的原因。

JSF是基于Java的Web应用程序的服务器端用户接口(UI)组件框架,它提供了一种以组件为中心来开发JavaWeb用户界面的方法,从而简化开发。更重要的是JSF将MVC模型继承到它的体系结构中,确保了程序的可维护性。

二、UI组件、JSTL以及EL表达式

刚刚已经提到JSF是以组件为中心进行开发的,所以在JSF中必定会存在与组件有关的技术。JSF定义了一组UI组件,以及一组标准的API。所以的UI组件都可以直接在页面里使用,而且组件几乎都是HTML form系列标记的翻版

JSTL(JavaServer Pages Standard Tag Library)是包括了很多JSP公用的核心功能。取代了在JSP应用中融合种类分多的标签,JSTL使用一种单一的标准的标签集合。

JSTL包括循环标签、流程控制标签、操作XML标签、格式化标签、使用SQL的标签和函数标签。

在JSF页面中,主要使用到的标签库是

<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %> <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>

EL表达式是一种特殊的表达式,分为两种:E表达式和L表达式。E表达式是即时表达式,即时表达式意味着页面在第一次调用时,JSP引擎就会计算表达式的值并立即返回结果。L表达式是延迟表达式,意味着不管是否合适,该表达式只能在页面的生命周期以后使用自己的机制计算表达式的值。

关于表达式的计算和赋值,在JSF底层,使用的反射技术实现的。

三、JSFDemo

该例子实现的功能是通过登录页面登录系统,如果登录成功,跳转到登录成功页面,否则跳转到登录失败页面。使用的服务器是JBoss服务器。

login.jsp

<%@ page language="java" pageEncoding="GB2312"%> <%@ 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> <title>Login</title> </head> <body> <f:view> <h:form> 帐号:<h:inputText value="#{user.username}"></h:inputText><br/> 密码:<h:inputSecret value="#{user.password}"></h:inputSecret><br/> <h:commandButton value="提交" action="#{user.login}"></h:commandButton> </h:form> </f:view> </body> </html>

其中

<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %> <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>

是使用JSTL标签库。
第一个是HTML的工具标签(因为组件几乎都是HTML form系列标记的翻版),第二个是核心标签库。

帐号:<h:inputText value="#{user.username}"></h:inputText><br/> 密码:<h:inputSecret value="#{user.password}"></h:inputSecret><br/> <h:commandButton value="提交" action="#{user.login}"></h:commandButton>

使用的是EL表达式中的延迟表达式,因为只有当输入过之后,提交的时候,在利用反射技术,为user实例赋值。并不是立即计算的。

failure.jsp

<%@ page language="java" pageEncoding="GB2312"%> <%@ 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> <title>Failure</title> </head> <body> <f:view> 登录失败!<a href="${login.jsp}">点此重新登录</a> </f:view> </body> </html>

success.jsp

<%@ page language="java" pageEncoding="GB2312"%> <%@ 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> <title>Success</title> </head> <body> <f:view> <h:outputLabel value="#{user.username}"></h:outputLabel><br/> 你好!恭喜你登录成功! </f:view> </body> </html>

faces-config.xml

<?xml version="1.0" encoding="UTF-8"?> <faces-config version="1.2" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xi="http://www.w3.org/2001/XInclude" 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"> <managed-bean> <managed-bean-name>user</managed-bean-name> <managed-bean-class>edu.cn.beans.User</managed-bean-class> <managed-bean-scope>session</managed-bean-scope> <managed-property> <property-name>username</property-name> <property-class>java.lang.String</property-class> <value /> </managed-property> <managed-property> <property-name>password</property-name> <property-class>java.lang.String</property-class> <value /> </managed-property> </managed-bean> <navigation-rule> <from-view-id>/login.jsp</from-view-id> <navigation-case> <from-outcome>"success"</from-outcome> <to-view-id>/success.jsp</to-view-id> </navigation-case> <navigation-case> <from-outcome>"failure"</from-outcome> <to-view-id>/failure.jsp</to-view-id> </navigation-case> </navigation-rule> </faces-config>

该配置文件中定义了托管Bean以及Bean的属性,还有就是导航规则,JSF架构会根据该配置文对整个程序件进行管理。

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"> <servlet> <servlet-name>FacesServlet</servlet-name> <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> <load-on-startup>0</load-on-startup> </servlet> <servlet-mapping> <servlet-name>FacesServlet</servlet-name> <url-pattern>/faces/*</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>login.jsp</welcome-file> </welcome-file-list> </web-app>

该配置文件主要是在客户端访问的时候,web服务器会根据该文件找到相关资源并调用。
User.java

package edu.cn.beans; public class User { private String username; private String password; public User(){ super(); } public User(String username,String password){ this.password = password; this.username = username; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String login(){ if(username.equals(password)){ return "success"; } return "failure"; } }


个人总结:JSF最重要的是faces-config.xml文件。如果该文件中的内容搞清了,那么整个流程就会很清楚,学起来也会很容易,使用起来也会得心应手。

转载请注明出处:http://blog.csdn.net/ljp2009012843/article/details/7593199

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值