




免费预览已结束,剩余13页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Struts 2整合JSF17.3 Struts 2整合JSF目前基于JSF规范较成熟的框架有两个,一个Sun的JSFUI,另一个是Apache的MyFaces框架。因为Struts 2提供了对MyFaces更好的插件支持,因此本示例采用Apache的MyFaces。整合之前让我们先来比较一下这两种表示层的框架。17.3.1 Struts 2整合JSF的优点下面从不同方面比较一下Sturts 2与JSF各自的特点。首先,在标签库方面,Struts 2的标签库相对要少一些,且不可以自定义;而JSF可以自定义标签。JSF框架拥有丰富的页面组件,如果需要的话可以自己编写相应的组件,或者扩展组件;而在JSP的页面中JSF提供了页面验证标签,可以做简单的长度和类型的验证。Struts 2的验证可以有两种方式,form验证与validator验证,功能上要比JSF强大。JSF的组件都是绑定到Bean的,而且数据验证的方法也可以绑定,这一点可以增强验证的功能。而对于验证的错误提示信息,它们都提供了国际化,使得验证更人性化。其次比较一下导航,二者之间的导航功能的相同点是都通过在XML文件中配置导航规则。Struts 2的XML中配置页面跳转的类型,如转发,重定向,由Action返回的字符串来决定导航的目标;而JSF在导航规则中设定页面导航,当某个页面请求到来时,根据导航规则调用指定的Action方法进行处理,并返回一个逻辑视图,然后跳转到与逻辑视图对应的页面。JSF同时支持在页面中绑定按钮触发Action的具体方法,导航原理也是一样的。最后比较一下Struts 2与JSF处理请求的方式。Struts 2调用指定的方法处理请求(如果没有指定具体方法则默认调用excute方法)。JSF采用了普通的POJO类作为它的Action,将Action类绑定到页面组件,通过值变监听与事件监听进行请求处理。相比之下,JSF处理请求的方式要比Struts2复杂,不方便系统升级。总而言之,如果将JSF做为Struts 2的视图层,用Struts 2的Action做模型层,可以开发出完美的应用系统。接下来就将讲解Struts 2与JSF 的结合使用。17.3.2 Struts 2与JSF整合过程每种框架都有它独到的设计之处,Struts 2的可扩展性使得它的生命力非常顽强。Struts 2提供了多种框架的插件包,它与MyFaces整合就是利用插件来实现的。下面我们介绍如何进行二者的结合应用。首先下载Struts 2的JSF插件,下载地址是/download.html。目前最高的插件版本是2.0.11,我们使用这个最新的版本与myfaces进行整合。Apache的MyFaces下载地址是./download.html,目前的最高版本是1.2.2,本示例使用的是1.1.5。下载后得到名为myfaces-core-1.1.5的压缩文件,将该文件解压,得到lib包下的运行库文件(.jar文件)。17.3.3 整合应用实例(1)2008年是奥运年,因此我们采用目前最流行的奥运啦啦队员的选拔活动为主题,设计一个Struts 2+JSF应用的示例。奥运啦啦队员选拔队员的设计分为3种功能:增加选手、查询选手、修改选手。按如下的顺序创建示例程序。(1)配置环境:配置Struts 2+JSF整合过程的运行环境。(2)配置struts.xml文件:配置JSF拦截器与请求的Action。(3)创建页面:注册选手页面,显示所有选手列表页面,修改选手页面。(4)创建JavaBean。选手信息类PlayerInfo与控制器类OlympicAction。(5)配置Web应用文件:配置Struts 2请求转发控制器。(6)发布运行:演示发布运行后的结果页面。下面详细介绍各个环节的实现过程。(1)配置应用程序运行环境。添加Struts 2核心资源包、Struts 2的JSF插件包、MyFaces资源包。(2)配置struts.xml。利用Struts 2+JSF开发视图层,需要的配置文件是struts.xml。这个文件配置信息分为两个部分,一个是JSF拦截器的配置,另一个是Struts 2的Action配置。首先看一下JSF拦截器的配置:在struts.xml文件中需要配置JSF的拦截器,使得所有的JSF的请求都能被正确处理。这个拦截器在Struts的插件包中已经定义好了,继承这个包就可以使用这些拦截器。拦截器的配置如代码17-17所示。代码17-17 struts.xml中JSF拦截器的配置接下来配置请求的Action。在请求的Action配置中需要继承myJSF拦截器,用来处理JSF页面的组件。本应用中来自页面的请求共有4种,如下所示。welcome.action:请求显示欢迎页面。配置的result类型为JSF,使用JSF解析welcome.jsp页面中的组件。view.action:请求显示所有选手列表。配置的result类型为JSF,使用JSF解析view.jsp页面中的组件,显示所有已报名选手的列表信息。register.action:请求增加选手。配置两种result。result的name=JSF,使用JSF解析register.jsp页面中的组件。result的name=view、type类型为chain,即增加选手后直接请求显示所有选手类表的view.action。findone.aciton:请求显示修改选手信息result类型为JSF,使用JSF解析findone.jsp页面中的组件。result的name=view、type类型为chain,即修改选手后直接请求显示所有选手类表的view.action。struts.xml的详细配置,如代码17-18所示。代码17-18 struts.xml的详细配置 view.action view.action (3)创建页面。示例程序共设计4个页面,分述如下。welcome.jsp。欢迎页面。该页面显示两种链接:我现在就要报名链接到新增加选手页面;我想看看都谁报名了链接到查看所有选手列表信息页面。register.jsp。增加用户页面。单击欢迎页面的我现在就要报名,跳转到本页面。该页面显示增加选手的信息,页面使用JSF输入组件标签,表单提供用户编号、姓名、年龄、性别与联络方式,所有的信息都由选手填写,而且实现数据验证功能,对于不合法的数据类型同时提供错误信息。view.jsp。查看所有选手列表信息。该页面采用JSF制表标签,循环遍历显示所有选手信息。该页面还提供了另一个链接这里还没有我,单击该链接跳转到增加选手页面。findone.jsp。该页面用来提供选手修改个人信息。单击查看所有选手列表信息页面的选手编号,跳转到本页面。本页面采用JSF输入类标签,显示该选手编号对应的详细信息,如选手编号、选手姓名、性别、年龄及联系方式,供选手修改。修改后单击我确定修改,跳转到显示所有选手类表页面。17.3.3 整合应用实例(2)欢迎页面welcome.jsp,如代码17-19所示。代码17-19 welcome.jspMy JSP welcome.jsp starting page 奥运啦啦队员海选报名啦! 请选择: 增加选手的注册页面register.jsp。单击我现在就要报名跳转到注册页面,这个页面的代码很多,标签中的value值就是配置在Action中注入的player的各种属性值,如代码17-20所示。代码17-20 register.jsp注册信息 同一个世界,同一个梦想 感谢您对奥运的支持,请填写下列信息. 查看所有选手信息列表页面view.jsp。在注册选手页面,填写选手信息后,单击报名了跳转到查看所有选手的页面,该页面将所有选手信息遍历显示到表格中。标签用来显示表格,用来显示表头,用来显示表列,详细的设计如代码17-21所示。代码17-21 view.jsp查看所有选手报名信息 已经有这么多人报名了! 这里有我吗?没有请单击加入他们 17.3.3 整合应用实例(3)修改选手页面findone.jsp。单击查看显示所有选手列表页面中的选手编号,跳转到修改选手信息页面。在findone.jsp中需要增加一个标签用来隐式的标识playerid。将选手编号为playerid的属性值显示到页面中。最后提交action的modify方法,详细的设计如代码17-22所示。代码17-22 findone.jsp修改信息 同一个世界,同一个梦想 感谢您对奥运的支持,请修改下列信息 感谢您对奥运的支持,提交前请确认您的信息 (4)创建JavaBean,包括选手信息类PlayerInfo与控制器类OlympicAction。首先创建选手信息类PlayerInfo.java。该类中定义选手的各种属性,包括id(编号)、name(名称)、age(年龄)、sex(性别)、tel(联系方式),如代码17-23所示。代码17-23 PlayerInfo.javapackage com.sunyang.olympic;public class PlayerInfo private int id;private String name;private int age;private String sex;private int tel;/定义默认的构造函数public PlayerInfo()/重写构造函数public PlayerInfo(int id,String name,String sex,int age,int tel)this.id=id;=name;this.sex=sex;this.age=age;this.tel=tel;/省略属性的getter和setter方法然后创建控制器类OlympicAction.java。OlympicAction.java用来处理增加选手页面、显示所有选手列表页面、修改选手信息页面功能的各种请求。该类需要继承ActionSupport,注入选手信息类PlayerInfo对象。添加处理页面表单的方法如下。预存储数据:本应用没有持久化,因此这里采用预先填写3条数据,存储在List对象中。增加选手:单击增加选手页面中的报名了,触发该方法。本应用中的所有选手信息,除了预先存储的数据以外,新增加的选手数据,均存储在会话session当中。查询所有选手:单击我想看看都谁报名了或是在修改选手页面中更新选手信息后,单击我确定修改!时触发此方法,此方法调用存储在List中的数据,如果会话已经被创建,就返回会话当中的列表List;否则返回预先存储的列表List.查找单个选手:该方法根据页面表单中选手的编号,遍历会话session中存储的选手对象,并将该对象中的数据返回给修改选手信息页面,供选手修改。修改选手信息:当选手在修改信息页面中更新当前信息后,点击我确定修改!提交到本方法。此方法将根据提交的选手编号,更新存储在会话session中的对象信息,并跳转到查看所有选手信息列表页面。具体如代码17-24所示。代码17-24 OlympicAction.javapackage com.sunyang.olympic;public class OlympicAction extends ActionSupport / 注入选手POJOprivate PlayerInfo player;/ 实例化选手对象public OlympicAction()player=new PlayerInfo(); / 定义选手的id属性,用来接受页面值信息private int playerid;/ 省略他们的getter和setter /定义封装选手对象的list List list=new ArrayList();/ 硬性地存储3条数据,public List setValue()/ 定义会话sessionHttpSession session = ServletActionContext.getRequest().getSession();if(session.getAttribute(player)=null)PlayerInfo no1=new PlayerInfo(2008,Andy,man,25,1111111111);PlayerInfo no2=new PlayerInfo(2009,Lily,female,25,22222222);PlayerInfo no3=new PlayerInfo(2010,Kaka,man,25,1111111111);list.add(no1);list.add(no2);list.add(no3);session.setAttribute(player, list); list=(List)session.getAttribute(player); return list;/ 遍历所有的选手并将其传值到页面public List getSelect() List listValue=new ArrayList();listValue=setValue(); return list;/ 增加选手对象public String save()HttpSession session = ServletActionContext.getRequest().getSession();if(session!=null) list=setValue();list.add(player);session.setAttribute(player,list); return view;/ 遍历单个选手,并将其值传到页面public String findone()HttpSession session = ServletActionContext.getRequest().getSession();if(session!=null)list=(List)session.getAttribute(player);for(int i=0;ilist.size();i+)PlayerInfo p=list.get(i);if(p.getId()=playerid)this.player=p; return success;/ 用来修改选手信息public String modify()HttpSession session = ServletActionContext.getRequest().getSession();if(session!=null)list=(List)session.getAttribute(player);for(int i=0;ilist.size();i+)PlayerInfo p=list.get(i);if(p.getId()=player.getId()list.remove(p);list.add(playe
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工程劳务分包合同设计3篇
- 安全监管人员委派书3篇
- 冲击钻钻孔桩分包合同工程暂停通知3篇
- 医疗设备进口代理合同案例2篇
- 聚丙烯腈干法纺丝考核试卷
- 石材开采中的水资源管理考核试卷
- 摊点经营的合法化与规范化考核试卷
- 液力传动装置的智能监测技术考核试卷
- 正统史学与民间视角:司马迁与固的史学对决及影响
- 2025-2026年医院的智能化趋势
- 《护理信息系统》课件
- 单片机技术与应用知到智慧树章节测试课后答案2024年秋甘肃省农垦中等专业学校
- 施工现场平面布置与临时设施、临时道路布置方案
- 建筑施工大型机械设备安全使用与管理培训
- T-CNPPA 3027-2024 药品泡罩包装应用指南
- 山东省潍坊市2025届高考数学二模试卷含解析
- 6S管理制度(可参考)-6s管理制度
- 四肢与关节检查
- 产后抑郁症讲课课件
- 低碳生活 主题班会课件-2篇
- 会下金蛋的鹅课件
评论
0/150
提交评论