开发环境:Myeclipse+JDK5+MyEclipse Tomcat+jsf2.2.8

JSF看起来和STRUTS还是有些像的,刚开始还是遇到一点问题:资源包的存放路径及文件访问路径。

开发Login案例过程如下:

1、下载开发JSF所需的jar包,google:jsf download

2、在MyEclipse中创建J2EE工程,然后引入jar包。

3、配置web.xml文件

 <?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
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-app_2_5.xsd"> <!-- 设置配置文件路径 默认就是web-inf下 -->
<context-param>
<param-name>javax.faces.application.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>1</load-on-startup>
</servlet> <servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<!-- 以后从web访问文件路径都是 localhost:80/jsflogin/faces/jsps/login.jsp这样的格式,不然报错-->
<url-pattern>/faces/*</url-pattern>
</servlet-mapping> <welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>

4、编写受管bean LoginBean.java

 package jsf.bean;

 import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext; public class LoginBean { String username;
String password;
//构造方法一定是public
public LoginBean() {
super();
// TODO Auto-generated constructor stub
}
/**
* @return the username
*/
public String getUsername() {
return username;
}
/**
* @param username the username to set
*/
public void setUsername(String username) {
this.username = username;
}
/**
* @return the password
*/
public String getPassword() {
return password;
}
/**
* @param password the password to set
*/
public void setPassword(String password) {
this.password = password;
} public String login(){
if(username.equals("admin")&&password.equals("admin")){ return "success";
}else{
FacesContext ctx=FacesContext.getCurrentInstance();
FacesMessage msg=new FacesMessage("Invalid Username and/or password,try again!");
ctx.addMessage("loginForm", msg);
return "failure";
}
} }

5、编写配置文件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>
<!-- 配置受管bean -->
<managed-bean>
<display-name>Login Bean Holder</display-name>
<managed-bean-name>LoginBean</managed-bean-name>
<managed-bean-class>jsf.bean.LoginBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<!-- 配置导航规则 -->
<navigation-rule>
<from-view-id>/jsps/login.jsp</from-view-id>
<navigation-case>
<from-outcome>success</from-outcome>
<to-view-id>/jsps/greeting.jsp</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>failure</from-outcome>
<to-view-id>/jsps/login.jsp</to-view-id>
</navigation-case>
</navigation-rule>
</faces-config>

6、编写资源离线包,国际化/本地化配置Message.properties,一定要放在src目录下(放在其它地方不知怎么配置)

 greeting_text=Welcome
username_label=Username
password_label=Password
login_button=Login

7、编写页面文件 login.jsp,greeting.jsp

login.jsp

 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!-- 引入jsf的标签 -->
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<!-- 加载资源文件 -->
<f:loadBundle basename="bundle.Messages" var="Message"/>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>系统登录</title>
</head>
<body>
<f:view>
<h:form id="loginForm">
<h:message for="loginForm" /><br/>
<h:outputText value="#{Message.username_label}" />
<h:inputText id="username" value="#{LoginBean.username}" required="true">
<f:validateLength maximum="15" minimum="5" />
</h:inputText>
<h:message for="username" /><br/>
<h:outputText value="#{Message.password_label}" />
<h:inputText id="password" value="#{LoginBean.password}" required="true">
<f:validateLength maximum="15" minimum="5" />
</h:inputText>
<h:message for="password" /><br/>
<h:commandButton id="submit" value="#{Message.login_button}" action="#{LoginBean.login}"/>
</h:form>
</f:view>
</body>
</html>

greeting.jsp

 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<f:loadBundle basename="bundle.Messages" var="Message"/>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>登录成功</title>
</head>
<body>
<f:view>
<h:outputText value="#{Message.greeting_text}" />,
<h:outputText value="#{LoginBean.username}" />!
</f:view>
</body>
</html>

8、开启Tomcat部署项目,访问http://localhost:80/jsflogin/faces/jsps/login.jsp

运行结果如下:

我的项目截图:

JSF开篇之Login案例的更多相关文章

  1. JSF 2 link, commandLink and outputLink example

    In JSF, <h:link />, <h:commandLink /> and <h:outputLink /> tags are used to render ...

  2. 新手福音︱正则表达式小工具RegExr

    由于之前在做NLP的内容,势必会接触正则表达式,但是呢,又觉得这个学不明白- 于是,这个工具还是蛮不错的,相当于在线正则速查+验证小工具,对于我这样的新手值得去玩玩. github:https://g ...

  3. 9.selenium

    1.安装与入门 pip3 install selenium 将chromedriver放到一个没有权限要求的目录 from selenium import webdriver driverpath=& ...

  4. Python Tornado简介

    简介 Tornado 是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本.这个 Web 框架看起来有些像web.py 或者 Google 的 webapp,不过为了 ...

  5. Spring(1)—初识

    Spring是一个开放源代码的设计层面框架,他解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用. 特点: 轻量--从大小与开销两方面而言Spring都是轻量的. 控 ...

  6. Re:从 0 开始的微服务架构--(四)如何保障微服务架构下的数据一致性--转

    原文地址:http://mp.weixin.qq.com/s/eXvoJew3bjFKzLLJpS0Otg 随着微服务架构的推广,越来越多的公司采用微服务架构来构建自己的业务平台.就像前边的文章说的, ...

  7. 关于ManualResetEvent的实例分析

    最近用WPF开发时使用多个定时器处理时需要实例化N多个DispatcherTimer,而且全部暴露在程序外部,显得很冗杂,例如下面的例子:用到的两个定时器就要实例化两个DispatcherTimer, ...

  8. 【MySQL】深入理解MySQL锁和事务隔离级别

    先看个小案例: 话不多说,上案例,先创建一个表 mysql> CREATE TABLE IF NOT EXISTS `account`( `id` INT UNSIGNED AUTO_INCRE ...

  9. Spring MVC -- MVC设计模式(演示4个基于MVC框架的案例)

    对于简单的Java Web项目,我们的项目仅仅包含几个jsp页面,由于项目比较小,我们通常可以通过链接方式进行jsp页面间的跳转. 但是如果是一个中型或者大型的项目,上面那种方式就会带来许多维护困难, ...

随机推荐

  1. Extjs ajax form 提交

    1.form 提交 form.form.submit({ url: "/HandlerExcelToDB/UploadFile.ashx", params: {}, success ...

  2. 深度分析 Java 的 ClassLoader 机制(源码级别)

    写在前面:Java中的所有类,必须被装载到jvm中才能运行,这个装载工作是由jvm中的类装载器完成的,类装载器所做的工作实质是把类文件从硬盘读取到内存中,JVM在加载类的时候,都是通过ClassLoa ...

  3. 浅析游戏引擎的资源管理机制——扒一扒Unity3D中隐藏在背后的资源管理

    游戏中通常有大量资源,如网格.材质.纹理.动画.着色器程序和音乐等,游戏引擎作为做游戏的工具,自然要提供良好的资源管理,让游戏开发者用最简单的方式使用资源.游戏引擎的资源管理包括两大部分:离线资源管理 ...

  4. C#之多态

    多态是面向对象编程中三大机制之一,其原理建立在"从父类继承而来的子类可以转换为其父类"这个规则之上,换句话说,能用父类的地方,就能用该类的子类.当从父类派生了很多子类时,由于每个子 ...

  5. C#: Create a WebRequest with HTTP Basic Authentication

    http://blog.csdn.net/huangyaoshifog/article/details/4470675 myReq = WebRequest.Create(url); string u ...

  6. oracle 11g行转列 列转行

    行转列: SELECT *   FROM   src_table   UNPIVOT (param_value FOR param_name IN (product_color AS 'product ...

  7. QT for android 比较完美解决 全屏问题

    项目用到QT qml,需要在android下面全屏显示,折腾了一晚上,搞定,分享下,希望能帮助他人. 参考 Qt on Android:让 Qt Widgets 和 Qt Quick 应用全屏显示 该 ...

  8. 得到当前活动的controller

    UIWindow+PazLabs.h (header file) #import <UIKit/UIKit.h> @interface UIWindow (PazLabs) - (UIVi ...

  9. PHP中如何给日期加上一个月 加一周 加一天

    echo   date("Y-m-d",strtotime("+1 month",strtotime("2012-02-04"))); 结果 ...

  10. IMP不到指定的表空间

    ==============================================================================只导dmp文件中的几个表数据,解决导入时ta ...