1. 前言
这个文档基于下列环境编写: Sun JDK 1.5.0, Eclipse 3.1 和 MyEclipse 4.0. 假如你注重到这个文档和你正在操作的Eclipse/MyEclipse的版本不一致, 在使用这个向导时碰到困难或者无法根据向导进行操作, 请参考 用户反馈 部分来了解如何汇报这个问题.
2. 介绍
在这个教程中我们将使用MyEclipse Enterprise Workbench来开发一个小小的 JSF 示例程序. 不需要您对关于JSF 和 MyEclipse的相关知识有所了解, 不过假如有所了解的话会更好.
因为Struts 是一个非常流行的 web 应用框架, 所以JSF 和 Struts之间的相似点我们适当的提示您注重, 来帮助哪些有过 Struts 开发经验的读者. 然而, 假如你以前对 Struts 一无所知, 你完全可以很安闲的忽略这些内容.
3. 系统需求
下面是这个指南所使用的软件的列表:
JDK 1.4 (Sun 或者 IBM)
http://java.sun.com/j2se/downloads/index.html
Eclipse 3.1 SDK
http://www.eclipse.org/downloads/index.php
MyEclipse 4.1
http://www.myeclipseide.com/ContentExpress-display-ceid-10.html
Tomcat 5.x (首选5.5.9, 或者其它符合标准的 Servlet/EJB 容器)
http://jakarta.apache.org/tomcat/index.html
对这个简单的例子, 用户名 是 "myeclipse" , 密码 也是 "myeclipse".
注重: 在安装过 JDK 并且重启你的计算机后, 请确保首先安装 Eclipse 然后是 MyEclipse, 最后安装 Tomcat. 所有这些软件安装完毕后, 请确保在 MyEclipse 中设置对应的Tomcat 5 服务器设置; 请使用正确的Tomcat Home 目录和你刚刚安装好的那个可用的 JDK. 假如你不知道如何在 MyEclipse 中设置 Tomcat, 你可以参考 使用应用服务器 快速入门向导.
4. 设置新项目和目录结构
为了组织我们的开发过程, 我们需要在 MyEclipse 中创建一个新的 Web 模块并向它添加 JSF 功能(JSF Capabilities)模块. 你可以通过向导来创建一个web项目, 请通过选择菜单项File > New > Other > Project > J2EE > Web Project 来打开, 如下图 4.1所示.
这个向导可以让你自定义项目的设置, 通过在对话框的输入框里输入一些值来自定义, 如图4.2所示.
注重: 因为开发 JSF 程序的时候流行和JSTL类库搭配, 所以在项目创建时建议您选择"JSTL Libraries". 然而, 您也可以在以后再来添加 JSTL 类库, 通过选择 MyEclipse 菜单的 "Add JSTL Libraries" 菜单项来完成.
一旦Web项目创建了, 我们需要给它添加JSF功能. 这个操作可以通过Package Explorer 视图的项目根节点上右键点击, 选择弹出菜单中的 MyEclipse > Add JSF Capabilities, 如图4.3 所示.
JSF 对话框的默认值对这个教程来说不需要修改就可以使用. 高手们也可以通过修改对话框里面的默认值来改变配置, 如图 4.4 所示.
这个向导结束后, 项目的目录结构将会如下图 4.5所示.
现在项目已经创建, 我们可以开始修改并创建我们自己的应用相关的代码了. 5. 创建消息包
让我们来通过创建一个MessageBundle文件正式开始我们的应用. 这是一个简单的属性文件, 它将保存所有的消息字符串以及相关的主键. 然后这个消息包可以用在我们的任何JSP文件中来让我们的应用很轻易的支持国际化语言. 作为类比, Struts 在这个领域提供了相似的支持, 通过使用ApplicationResources.properties 文件, 以及不同的 标签, 以及bean标签所答应的消息包属性来完成这套功能.
在 JSF里面, 我们可以在JSP页面里加入一行代码来加载消息包:
注重: 这一行代码创建了一个生命周期为页面的消息包, 这个包可以稍后在页面中通过变量名'bundle'来进行引用, 可以用来查找消息主键, 然后返回对应的消息值.
在创建消息包文件的时候, 先在源代码目录创建包 com.jsfdemo, 通过右键点击源代码目录, 然后选择弹出的菜单中的New > Package即可完成. 要创建消息包文件, 我们使用新建文件向导, 右键点击项目的’src’目录, 在弹出的菜单中选择New > File , 如下图 5.1 所示.
当指定新建文件的保存位置时, 选择 Browse..., 选中目录 /JSFLoginDemo/src/com/jsfdemo, 将文件命名为 MessageBundle.properties, 然后选择 Finish.
新建消息包文件成功后, 我们需要为每个在JSP里面需要显示的标签或者字符串以键值对的方式添加到属性文件中.复制图5.2中的内容到你的消息包文件然后保存它:
MessageBundle.properties
user_name_label=User Name:
user_password_label=Password:
login_button_label=Login
在 MyEclipse 4.0 中 faces-config.xml 编辑器已经比以前的版本有所增强, 你不仅可以创建和治理应用程序流程(浏览规则 Navigation Cases), 还可以通过大纲(Outline)视图来创建/修改并治理所有资源. 你可以点击大纲视图右上角的下箭头按钮来添加新的bean, 如图6.2:
现在你会看到新建Managed Bean 向导对话框; 请按照下面的图6.3和6.4所示来输入值:
你现在会注重到新的 UserBean 被添加到 Outline 视图 , 如图 6.5 所示:
同时新建的UserBean.java 源文件也在 Java 编辑器中打开了:
注重我们的两个属性(username 和 password)的getters 和 setters 方法已经自动生成了, 所以对这个类唯一需要做的就是添加并实现loginUser 方法, 这个方法将会在用户登录时调用.
下面的图6.7显示了loginUser方法的代码片断. 请将这个代码复制粘贴到你自己的文件里, 并添加必要的新的类的import语句:
UserBean.java
public String loginUser() {
if("myeclipse".equals(getUserName()) && "myeclipse".equals(getPassword()))
return "success";
FacesContext facesContext = FacesContext.getCurrentInstance();
FacesMessage facesMessage = new FacesMessage(
"You have entered an invalid user name and/or password");
facesContext.addMessage("loginForm", facesMessage);
return "failure";
}
图 6.7: 新建的 UserBean.java文件中的 loginUser 代码片断
仔细看看 bean 的代码, 我们可以注重到一些独特之处.例如, UserBean 类并没有继续或者实现绑定到 JSF 的任何类或者接口. 它仅仅是一个简单的包含了额外的逻辑来执行有用的操作的 JavaBean. 用 Struts 的术语来说, 它包含了Struts Form 和 Struts Action的所有功能, 方便的合并在一个类中.
另一个和 Struts 的不同之处是这些方法没有返回任何非凡的类, 例如ActionForward, 因为导航信息是在faces-config.xml部署描述符中通过配置完成的.
这个文档基于下列环境编写: Sun JDK 1.5.0, Eclipse 3.1 和 MyEclipse 4.0. 假如你注重到这个文档和你正在操作的Eclipse/MyEclipse的版本不一致, 在使用这个向导时碰到困难或者无法根据向导进行操作, 请参考 用户反馈 部分来了解如何汇报这个问题.
2. 介绍
在这个教程中我们将使用MyEclipse Enterprise Workbench来开发一个小小的 JSF 示例程序. 不需要您对关于JSF 和 MyEclipse的相关知识有所了解, 不过假如有所了解的话会更好.
因为Struts 是一个非常流行的 web 应用框架, 所以JSF 和 Struts之间的相似点我们适当的提示您注重, 来帮助哪些有过 Struts 开发经验的读者. 然而, 假如你以前对 Struts 一无所知, 你完全可以很安闲的忽略这些内容.
3. 系统需求
下面是这个指南所使用的软件的列表:
JDK 1.4 (Sun 或者 IBM)
http://java.sun.com/j2se/downloads/index.html
Eclipse 3.1 SDK
http://www.eclipse.org/downloads/index.php
MyEclipse 4.1
http://www.myeclipseide.com/ContentExpress-display-ceid-10.html
Tomcat 5.x (首选5.5.9, 或者其它符合标准的 Servlet/EJB 容器)
http://jakarta.apache.org/tomcat/index.html
对这个简单的例子, 用户名 是 "myeclipse" , 密码 也是 "myeclipse".
注重: 在安装过 JDK 并且重启你的计算机后, 请确保首先安装 Eclipse 然后是 MyEclipse, 最后安装 Tomcat. 所有这些软件安装完毕后, 请确保在 MyEclipse 中设置对应的Tomcat 5 服务器设置; 请使用正确的Tomcat Home 目录和你刚刚安装好的那个可用的 JDK. 假如你不知道如何在 MyEclipse 中设置 Tomcat, 你可以参考 使用应用服务器 快速入门向导.
4. 设置新项目和目录结构
为了组织我们的开发过程, 我们需要在 MyEclipse 中创建一个新的 Web 模块并向它添加 JSF 功能(JSF Capabilities)模块. 你可以通过向导来创建一个web项目, 请通过选择菜单项File > New > Other > Project > J2EE > Web Project 来打开, 如下图 4.1所示.
这个向导可以让你自定义项目的设置, 通过在对话框的输入框里输入一些值来自定义, 如图4.2所示.
注重: 因为开发 JSF 程序的时候流行和JSTL类库搭配, 所以在项目创建时建议您选择"JSTL Libraries". 然而, 您也可以在以后再来添加 JSTL 类库, 通过选择 MyEclipse 菜单的 "Add JSTL Libraries" 菜单项来完成.
一旦Web项目创建了, 我们需要给它添加JSF功能. 这个操作可以通过Package Explorer 视图的项目根节点上右键点击, 选择弹出菜单中的 MyEclipse > Add JSF Capabilities, 如图4.3 所示.
JSF 对话框的默认值对这个教程来说不需要修改就可以使用. 高手们也可以通过修改对话框里面的默认值来改变配置, 如图 4.4 所示.
这个向导结束后, 项目的目录结构将会如下图 4.5所示.
现在项目已经创建, 我们可以开始修改并创建我们自己的应用相关的代码了. 5. 创建消息包
让我们来通过创建一个MessageBundle文件正式开始我们的应用. 这是一个简单的属性文件, 它将保存所有的消息字符串以及相关的主键. 然后这个消息包可以用在我们的任何JSP文件中来让我们的应用很轻易的支持国际化语言. 作为类比, Struts 在这个领域提供了相似的支持, 通过使用ApplicationResources.properties 文件, 以及不同的 标签, 以及bean标签所答应的消息包属性来完成这套功能.
在 JSF里面, 我们可以在JSP页面里加入一行代码来加载消息包:
注重: 这一行代码创建了一个生命周期为页面的消息包, 这个包可以稍后在页面中通过变量名'bundle'来进行引用, 可以用来查找消息主键, 然后返回对应的消息值.
在创建消息包文件的时候, 先在源代码目录创建包 com.jsfdemo, 通过右键点击源代码目录, 然后选择弹出的菜单中的New > Package即可完成. 要创建消息包文件, 我们使用新建文件向导, 右键点击项目的’src’目录, 在弹出的菜单中选择New > File , 如下图 5.1 所示.
当指定新建文件的保存位置时, 选择 Browse..., 选中目录 /JSFLoginDemo/src/com/jsfdemo, 将文件命名为 MessageBundle.properties, 然后选择 Finish.
新建消息包文件成功后, 我们需要为每个在JSP里面需要显示的标签或者字符串以键值对的方式添加到属性文件中.复制图5.2中的内容到你的消息包文件然后保存它:
MessageBundle.properties
user_name_label=User Name:
user_password_label=Password:
login_button_label=Login
现在我们的 MessageBundle 创建完毕了, 接下来我们要创建受管Bean(ManagedBean), 它将处理我们的用户登录操作. 6. 创建受管Bean
在这一部分我们将会看到如何创建ManagedBean , 这个Bean将会执行登录JSP页面所提示的登录操作, 以及保存用户输入的用户名和密码. 出于演示的目的,我们的登录操作知识简单的检查用户名和密码是不是都是 "myeclipse", 然后将用户重新指引到userLoginSuccess.jsp 页面. 否则它会返回到登录页面.
首先使用MyEclipse JSF Editor打开文件faces-config.xml :
在 MyEclipse 4.0 中 faces-config.xml 编辑器已经比以前的版本有所增强, 你不仅可以创建和治理应用程序流程(浏览规则 Navigation Cases), 还可以通过大纲(Outline)视图来创建/修改并治理所有资源. 你可以点击大纲视图右上角的下箭头按钮来添加新的bean, 如图6.2:
现在你会看到新建Managed Bean 向导对话框; 请按照下面的图6.3和6.4所示来输入值:
你现在会注重到新的 UserBean 被添加到 Outline 视图 , 如图 6.5 所示:
同时新建的UserBean.java 源文件也在 Java 编辑器中打开了:
注重我们的两个属性(username 和 password)的getters 和 setters 方法已经自动生成了, 所以对这个类唯一需要做的就是添加并实现loginUser 方法, 这个方法将会在用户登录时调用.
下面的图6.7显示了loginUser方法的代码片断. 请将这个代码复制粘贴到你自己的文件里, 并添加必要的新的类的import语句:
UserBean.java
public String loginUser() {
if("myeclipse".equals(getUserName()) && "myeclipse".equals(getPassword()))
return "success";
FacesContext facesContext = FacesContext.getCurrentInstance();
FacesMessage facesMessage = new FacesMessage(
"You have entered an invalid user name and/or password");
facesContext.addMessage("loginForm", facesMessage);
return "failure";
}
图 6.7: 新建的 UserBean.java文件中的 loginUser 代码片断
仔细看看 bean 的代码, 我们可以注重到一些独特之处.例如, UserBean 类并没有继续或者实现绑定到 JSF 的任何类或者接口. 它仅仅是一个简单的包含了额外的逻辑来执行有用的操作的 JavaBean. 用 Struts 的术语来说, 它包含了Struts Form 和 Struts Action的所有功能, 方便的合并在一个类中.
另一个和 Struts 的不同之处是这些方法没有返回任何非凡的类, 例如ActionForward, 因为导航信息是在faces-config.xml部署描述符中通过配置完成的.