`

JSF搭建完成!(源码)

阅读更多

今天搭建了我的第一个JSF,发上来纪念一下。
**********************************************JSF简介**************************************

JSF是由Java Community Process (JCP)制定的一个Web应用框架标准。JSF具有良好定义的请求处理生命周期和丰富的组件层次结构,旨在推动基于Java的Web用户界面开发的简易性。利用JSF提供的可重用、可扩展、基于组件的用户界面框架,在快速开发工具RAD的支持下,可以通过拖放组件的方式对Web用户界面进行可视化编辑,将用户界面上的组件与一个数据源绑定,并将客户端用户界面产生的事件交给服务器端处理,从而大大降低基于Java的Web用户界面的开发难度,提高开发效率。

JSF 的主要优势之一就是它既是Java Web用户界面标准又是严格遵循模型-视图-控制器 (MVC) 设计模式的框架。用户界面代码(视图)与应用程序数据和逻辑(模型)的清晰分离使JSF应用程序更易于管理。为了准备提供页面对应用程序数据访问的JSF上下文和防止对页面未授权或不正确的访问,所有与应用程序的用户交互均由一个前端“Faces”servlet(控制器)来处理。 JSF技术做到了应用程序逻辑和表示的完全分离,是真正彻底的MVC模式。

JSF是构建Web应用程序的新标准Java框架,可以依据JSF的框架标准手工书写Web应用程序,以文本方式像写HTML或JSP程序一样实现Web用户界面的设计;同时在开发、运行以及调试前还需要搭建系统运行平台。

这样做的缺点是不能充分体现可视化开发的便捷和高效,一般是在分析Web应用程序的结构时使用。

(1)视图设计

方便、快捷地开发基于JSF的Web应用程序,是在JSF提供了一组丰富的、可重用的服务器端用户界面组件的条件下实现的。在开发工具的支持下,用户可以很容易地在可视化环境中利用这些组件构建Web用户界面,处理组件的数据校验、事件处理等用户界面管理问题。

设计每个需要的JSP页面,在页面中放置JSF的内置组件,并将组件与应用层的JavaBean绑定。利用RAD工具能通过拖放组件的方式轻松实现页面文件,不需要手写大量代码。开发工具自动生成页面对应的java文件,在文件中定义好了页面的JSF组件及其getter、setter方法以及JSF组件的“action”属性对应的方法等。程序员可以方便地在已有程序的基础上修改、调试。

(2)模型设计

JSF技术做到了应用程序逻辑和表示的完全分离。在模型设计部分,程序员只需要考虑程序的逻辑功能,不需要考虑数据的表现形式。JSF的模型是通过JavaBean程序来实现的。

JSF的模型是根据页面中组件需要处理的业务逻辑而设计实现的。在JSF中使用JavaBean可以直接在JSF页面中声明或者在配置文件faces-config. xml中声明。

如果手工部署应用,则编译完成的JavaBean文件应放到Web应用程序的WEB-INF\classes目录下(TOMCAT环境下);如果借助于RAD开发工具,设计人员就不需要考虑部署的细节,开发工具会自动把实现了业务逻辑的JavaBean文件(未编译的java文件和编译成功后的jar包)成功地部署在相关位置。

(3)控制器设计

JSF的控制器设计是在配置文件中完成的,相关的主要有两个文件:web.xml文件和faces-config.xml文件(均在WEB-INF目录下)。web.xml文件主要用于控制JSF的生命周期,实现部署描述符。faces-config.xml文件实现导航,在文件中控制页面之间的跳转流程。

配置步骤是首先配置Web应用程序的web.xml文件,然后是配置JSF的控制文件faces-config.xml文件。这两个文件格式固定,在IDE环境中这个过程由工具自动完成,不需要设计人员的干预,即使手工配置也比较简单。

JSF的技术重点在View部分,它实现了Web应用程序设计角色的完全分离。JSF网页设计者只需要专注于页面的设计;应用程序开发者主要关心Model部分的JavaBean的开发;程序的流程控制则由faces-config.xml专门配置。

总结

JSF是基于Java 的Web 应用开发领域里提供了一个可重用、可扩展、基于组件、工具友好的服务器端UI 框架。在支持JSF 的RAD开发工具中,人们可以像使用Visual Studio. NET一样方便快捷地构建Web 用户界面,大大降低了利用Java技术实现Web 用户界面的难度,提高了开发效率。

JSF具有强大的组件体系和事件处理系统,完全实现了MVC模式的应用架构,使得基于Java的Web用户界面程序开发难度大大降低,提高了开发效率,非常适用于Web页面的开发。

JSF是一个开放的标准,具有很好的可扩展性。依照JSF 的规范,用户完全可以根据需求定制自己的用户界面组件、事件处理器、数据校验和转换组件等,这些组件和标准的JSF 组件一样是可重用的。JSF API 是直接架构在Servlet API 之上的,因此JSF 用户界面组件的呈现并不局限于特定的脚本技术或标记语言。表示层完全可以采用JSP 之外的技术。

在众多的J2EE表现层框架技术中,JSF表现出其旺盛的生命力。尽管JSF技术还有不少问题,但随着JSF技术的不断成熟和版本更新,其必将获得越来越多的应用。

-------------------------------------------------------------------------------------------------------------------------------

JSF框架搭建(MyEclipse)(实现用户登录)

1.新建一个web project,选择Java EE 5.0选项,输入项目名称:JSFLoginDemo(例),点击完成。

2.菜单中选择MyEclipse,Project Capabilities--->Add JSF Capabilities,点击完成。

3.src下新建一个资源文件,命名Messages.properties(用处:做显示的国际化),写入
login_label=Please Login:
login_label=User name:

4.src下建个包,包名为com.jsfdemo

5.添加受管Bean(New Managed Bean),命名UserBean,Class:com.jsfdemo.UserBean,Scope:session,添加userName,Property Kind:Simple,Class:java.lang.String,完成。再添加password,Property Kind:Simple,Class:java.lang.String,完成。下面两项打钩----->Next---->finish,检查配置信息,添加登录信息,结果如下:

/**
 *
 */
package com.jsfdemo;

/**
 * @author user
 *
 */
public final class UserBean extends Object {

 /**
  *
  */
 private String password;
 /**
  *
  */
 private String userName;
 
 /**
  *进行登陆操作
  * @return 导航规则地址
  */
 
 public String login(){
  if(getUserName().equals("myeclipse") && getPassword().equals("myeclipse")){
   return "success";
 }
return "failure";
}
 /**
  * @return the password
  */
 public String getPassword() {
  return password;
 }
 /**
  * @param password the password to set
  */
 public void setPassword(String password) {
  this.password = password;
 }
 /**
  * @return the userName
  */
 public String getUserName() {
  return userName;
 }
 /**
  * @param userName the userName to set
  */
 public void setUserName(String userName) {
  this.userName = userName;
 }

}


6.在faces-config.xml内添加Jsp文件,命名userLogin,Template to use:Default JSF template,点击完成。编码改为GBK
<%@ page language="java" pageEncoding="GBK"%>
拖动标签添加到页面,最终代码如下:

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

<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
 <base href="<%=basePath%>">

 <title>My JSF 'userLogin.jsp' starting page</title>
 
 <meta http-equiv="pragma" content="no-cache">
 <meta http-equiv="cache-control" content="no-cache">
 <meta http-equiv="expires" content="0">   
 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
 <meta http-equiv="description" content="This is my page">
 <!--
 <link rel="stylesheet" type="text/css" href="styles.css">
 -->

</head>
 
<body>
 <f:view>
  <f:loadBundle basename="Messages" var="bundle"/>
   <h:outputText value="#{bundle.login_label}"></h:outputText>
   <h:form id="loginForm">
       <h:outputLabel for="userName" value="#{bundle.username_label}"></h:outputLabel>
       <h:inputText id="username" value="#{UserBean.userName}"></h:inputText>
       <br><h:outputLabel for="userName" value="#{bundle.Password_label}"/>
       <h:inputSecret id="password" value="#{UserBean.password}"></h:inputSecret><br><h:commandButton id="submit" type="submit" value="OK" action="#{UserBean.login}"></h:commandButton>
   </h:form>
   
   
  </f:view>
</body>
</html>

7.在faces-config.xml内添加Jsp文件,命名userLoginSuccess,Template to use:Default JSF template,点击完成。编码改为GBK
<%@ page language="java" pageEncoding="GBK"%>
拖动标签添加到页面,最终代码如下:

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

<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
 <base href="<%=basePath%>">

 <title>My JSF 'userLoginSuccess.jsp' starting page</title>
 
 <meta http-equiv="pragma" content="no-cache">
 <meta http-equiv="cache-control" content="no-cache">
 <meta http-equiv="expires" content="0">   
 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
 <meta http-equiv="description" content="This is my page">
 <!--
 <link rel="stylesheet" type="text/css" href="styles.css">
 -->

</head>
 
<body>
 <f:view>
     Hello <h:outputText value="#{UserBean.userName}"></h:outputText>,you are success!
 </f:view>
</body>
</html>

8.设计Navigation Case(导航案例),然后路径命名和描述。

9.运行项目,检验结果

10.配置中文显示:复制Messages.properties,粘贴重命名为Messages_zh_CN.properties

11.doc下运行native2ascii,输入汉语,回车,显示汉字代码。把代码复制到文件中,代码实例如下:

login_label=\u8bf7\u767b\u9646\uff1a
username_label=\u7528\u6237\u540d\uff1a
Password_label=\u5bc6\u7801\uff1a

12.重新载入项目,可显示汉字。

配置完成!!!

施杨出品!谢绝转载!!!

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics