What and How to use JSF
2010-12-07 13:49
405 查看
JSF的简介
JavaServerFaces
是2004年SUN推出的一个规范,也是基于MVC的一种架构
Struts2是基于标准的HTTP请求响应
的模式,而JSF是基于事件
的一种编程模型
JSF中页面表单的每一个输入域都绑定到后台backingbean
中对应的属性上
JSF也是基于Web的
,属于JSP跟Servlet层次,所以使用Tomcat即可运行
而无需借助类似于WebLogic、JBoss、GlassFish
之类的应用服务器
JSF的实现
比较有名的是Apache的MyFaces
,它提供了更多的组件,也是比较成熟的
使用MyFaces
可以满足日常所需的绝大多数功能的需求,比较全面
JSF与ASP.NET
SUN之所以推出JSF
,其实很大程度上是模仿了微软的ASP.NET
编写JSF时也是通过标签来引入相应元素
,例如填写完表单内容后点击提交按钮
它就会执行与提交按钮所绑定的事件所对应的方法
因此从这点来说,JSF跟ASP.NET是异曲同工的
它们都是将期望的原始的Web开发方式转化成接近于桌面应用的开发方式
下面是JSF应用的简单示例
首先是web.xml文件
然后是faces-config.xml文件
接着是index.jsp页面
接着是login.jsp页面
接着是success.jsp页面
最后是ManagedBean
JavaServerFaces
是2004年SUN推出的一个规范,也是基于MVC的一种架构
Struts2是基于标准的HTTP请求响应
的模式,而JSF是基于事件
的一种编程模型
JSF中页面表单的每一个输入域都绑定到后台backingbean
中对应的属性上
JSF也是基于Web的
,属于JSP跟Servlet层次,所以使用Tomcat即可运行
而无需借助类似于WebLogic、JBoss、GlassFish
之类的应用服务器
JSF的实现
比较有名的是Apache的MyFaces
,它提供了更多的组件,也是比较成熟的
使用MyFaces
可以满足日常所需的绝大多数功能的需求,比较全面
JSF与ASP.NET
SUN之所以推出JSF
,其实很大程度上是模仿了微软的ASP.NET
编写JSF时也是通过标签来引入相应元素
,例如填写完表单内容后点击提交按钮
它就会执行与提交按钮所绑定的事件所对应的方法
因此从这点来说,JSF跟ASP.NET是异曲同工的
它们都是将期望的原始的Web开发方式转化成接近于桌面应用的开发方式
下面是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"> <!-- 也可以不指定JSF配置文件,默认即/WEB-INF/faces-config.xml --> <!-- 类比于Spring的applicationContext.xml --> <!-- <context-param> <param-name>javax.faces.CONFIG_FILES</param-name> <param-value>/WEB-INF/faces-config.xml</param-value> </context-param> --> <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-name>Faces Servlet</servlet-name> <url-pattern>*.faces</url-pattern> </servlet-mapping> </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>标签注册backingbean的信息】****** --> <managed-bean> <!-- 在JSF术语中称UserBean叫做ManagedBean,即受JSF框架管理的bean --> <!-- 这里<managed-bean-name>对应页面中#{userBean.username}的值 --> <managed-bean-name>userBean</managed-bean-name> <managed-bean-class>com.langsin.backingbean.UserBean</managed-bean-class> <managed-bean-scope>request</managed-bean-scope> </managed-bean> <!-- ******【使用<navigation-rule>标签注册导航规则的信息】****** --> <navigation-rule> <!-- 指定导航规则来自于某一个视图 --> <from-view-id>/login.jsp</from-view-id> <!-- 接下来使用<navigation-case>指定导航情况 --> <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>/login.jsp</to-view-id> </navigation-case> </navigation-rule> </faces-config> <!-- 该文件与web.xml一样,均位于项目的WEB-INF目录下 --> <!-- 我们可以在MyEclipse中创建完WebProject后,右键项目—→MyEclipse—→Add JSF Capabilities—→依次配置即可 -->
接着是index.jsp页面
<%@ page pageEncoding="UTF-8"%> <%-- 运行时应该直接访问http://127.0.0.1:8088/JSF/login.faces 由于匹配了web.xml中配置的*.faces路径,于是会经过FacesServlet FacesServlet会直接查找当前工程的login.jsp文件,并加入JSF标签库的支持 若直接访问http://127.0.0.1:8088/JSF/login.jsp,会由于不认识JSF标签导致页面出错 --%> <%response.sendRedirect(request.getContextPath() + "/login.faces");%>
接着是login.jsp页面
<%@ page pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%> <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%> <f:view> <h1>Login Page</h1> <h3><font color="red">提示:</font>程序设定的用户名和密码分别为<font color="blue"><strong>admin</strong></font>和<font color="blue"><strong>jadyer</strong></font></h3> <br><br> <B><h:outputText value="#{userBean.message}" /></B> <h:form> <h:outputText value="username: " /> <h:inputText value="#{userBean.username}" /><BR> <%-- 这里#{}表示一种绑定,这里是与userBean对象的username属性进行绑定 --%> <h:outputText value="password: " /> <h:inputSecret value="#{userBean.password}" /><BR> <%-- action属性表示:点击该按钮时就会触发userBean对象的validateUser()方法 --%> <%-- 但是注意,页面中不要写成action="#{userBean.validateUser()}"的形式 --%> <h:commandButton value="Login" action="#{userBean.validateUser}" /> </h:form> </f:view>
接着是success.jsp页面
<%@ page pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%> <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%> <%-- 从HTTP角度来说,其实login.jsp和success.jsp是在一个请求里面的 当我们在login.jsp中点提交时进入到服务器端,服务器端是一个请求转发的过程,然后回到了success.jsp页面 因为整个过程是在一个请求里面,而在faces-config.xml中注册的<managed-bean-scope>也是在一个request里面 因此login.jsp和success.jsp共享同一个UserBean的实例,于是在login.jsp中将属性值绑定到userBean对象的属性中 然后在success.jsp中就可以通过<h:outputText value="#{userBean.username}" />取得所绑定的userBean对象的属性值 --%> <f:view> <h:outputText value="username: " /> <h:outputText value="#{userBean.username}" /><BR> <h:outputText value="password: " /> <h:outputText value="#{userBean.password}" /> </f:view>
最后是ManagedBean
package com.langsin.backingbean; /** * backingbean表示后台bean,这是JSF的一个术语 * @see 页面上绑定的对象都叫做backingbean */ public class UserBean { private String username; private String password; private String message; /*--三个属性对应的getter和setter略--*/ //如果该方法最后return null的话,那么该请求就会返回到原页面,即login.jsp页面 public String validateUser() { if ("admin".equals(username) && "jadyer".equals(password)) { return "success"; //并不是一定要写成success,也可以使用其它有意义的字符串 } this.setMessage("username or password error!"); return "failure"; } }
相关文章推荐
- Introduction to COM - What It Is and How to Use It.
- WHAT IS ISO? A CAMERA’S SENSITIVITY TO LIGHT EXPLAINED, AND HOW TO USE IT
- 802.11 WDS how does it work, when to use it and what are the limitations
- iOS开发UI-Quartz2D what about Quartz2D ?and how to use it ?
- (Page 1 of 3 )A walking tour of JavaBeans What JavaBeans is, how it works, and why you want to use it
- (Page 2 of 3 )A walking tour of JavaBeans 2 :What JavaBeans is, how it works, and why you want to use it
- (Page 3 of 3 )A walking tour of JavaBeans What JavaBeans is, how it works, and why you want to use it
- Introduction to COM - What It Is and How to Use It.(ZT)
- Responsive Web Design: What It Is and How To Use It
- MySpace Unraveled: What it is and how to use it safely
- Four Logical Relationships of Project Management: What They Are and How To Use Them
- What is reflection and how to use it in CSharp ?
- What is JNI Graphics and how to use it?
- Introduction to COM - What It Is and How to Use It.
- Windows,Introduction to COM - What It Is and How to Use It.
- how to use seeta face engine to detect and recognize face
- [转]POI : How to Create and Use User Defined Functions
- What is the PPA and How to do with it ?
- iOS 5 Storyboard: How To use Segues, Scenes and Static Content UITableViews--Part I
- Qt How to use connect between incompatible signal and slot