JSF开篇之Login案例
开发环境: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案例的更多相关文章
- JSF 2 link, commandLink and outputLink example
In JSF, <h:link />, <h:commandLink /> and <h:outputLink /> tags are used to render ...
- 新手福音︱正则表达式小工具RegExr
由于之前在做NLP的内容,势必会接触正则表达式,但是呢,又觉得这个学不明白- 于是,这个工具还是蛮不错的,相当于在线正则速查+验证小工具,对于我这样的新手值得去玩玩. github:https://g ...
- 9.selenium
1.安装与入门 pip3 install selenium 将chromedriver放到一个没有权限要求的目录 from selenium import webdriver driverpath=& ...
- Python Tornado简介
简介 Tornado 是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本.这个 Web 框架看起来有些像web.py 或者 Google 的 webapp,不过为了 ...
- Spring(1)—初识
Spring是一个开放源代码的设计层面框架,他解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用. 特点: 轻量--从大小与开销两方面而言Spring都是轻量的. 控 ...
- Re:从 0 开始的微服务架构--(四)如何保障微服务架构下的数据一致性--转
原文地址:http://mp.weixin.qq.com/s/eXvoJew3bjFKzLLJpS0Otg 随着微服务架构的推广,越来越多的公司采用微服务架构来构建自己的业务平台.就像前边的文章说的, ...
- 关于ManualResetEvent的实例分析
最近用WPF开发时使用多个定时器处理时需要实例化N多个DispatcherTimer,而且全部暴露在程序外部,显得很冗杂,例如下面的例子:用到的两个定时器就要实例化两个DispatcherTimer, ...
- 【MySQL】深入理解MySQL锁和事务隔离级别
先看个小案例: 话不多说,上案例,先创建一个表 mysql> CREATE TABLE IF NOT EXISTS `account`( `id` INT UNSIGNED AUTO_INCRE ...
- Spring MVC -- MVC设计模式(演示4个基于MVC框架的案例)
对于简单的Java Web项目,我们的项目仅仅包含几个jsp页面,由于项目比较小,我们通常可以通过链接方式进行jsp页面间的跳转. 但是如果是一个中型或者大型的项目,上面那种方式就会带来许多维护困难, ...
随机推荐
- Flex xxx-app.xml配置
<?xml version="1.0" encoding="UTF-8"?> <application xmlns="http:/ ...
- getchar(),gets(),scanf()的差异比较
scanf( )函数和gets( )函数都可用于输入字符串,但在功能上有区别.若想从键盘上输入字符串"hi hello",则应该使用gets()函数. gets可以接收空格:而sc ...
- docker 感性体验
Docker 1.0正式发布!1.0 版本包含很多新特性,这也是 Docker 的首个产品级的版本.从今天开始,你将会一直听到一个新的概念 —— Docker as a platform ,其组件包括 ...
- mysql日志文件
mysql的数据文件夹里出现mysql-bin日志文件,通过my.cnf注释掉log后,是否可以删除了? 参考 http://database.51cto.com/art/201107/278988. ...
- 标签跳转break和continue
标签是后面跟有冒号的标识符,例如 label1: 在java中,标签起作用的唯一的地方刚好是在迭代语句之前. “刚好之前”的意思表明,在标签和迭代之间置入热和语句都不好. 而在迭代之前设置标签的唯一 ...
- 【BZOJ 2132】 圈地计划
Description 最近房地产商GDOI(Group of Dumbbells Or Idiots)从NOI(Nuts Old Idiots)手中得到了一块开发土地.据了解,这块土地是一块矩形的区 ...
- Very large tabs in eclipse panes on Ubuntu
http://stackoverflow.com/questions/11805784/very-large-tabs-in-eclipse-panes-on-ubuntu ou can edit E ...
- 使用parseJSON代替eval
有些程序员如果没有很好的在javascript中解析json数据,往往会直接eval把json转成js对象,这时候如果json的数据中包含了被注入的恶意数据,则可能导致代码注入的问题. 正确的做法是分 ...
- 修复jquery.treeview的增加子节点的方法的bug
1.修复理由 在一个android项目中用到了treeview控件(本来自己通过android的原生api实现了一个http://www.cnblogs.com/Mr-Nobody/p/3527688 ...
- adb shell 出现 error :
首先,确保 adb 服务有起来 adb kill-server adb start-server其次,确保 adb devices 可以找到设备