struts2标记库.ppt

上传人:xt****7 文档编号:1883258 上传时间:2019-11-09 格式:PPT 页数:45 大小:1.17MB
返回 下载 相关 举报
struts2标记库.ppt_第1页
第1页 / 共45页
struts2标记库.ppt_第2页
第2页 / 共45页
struts2标记库.ppt_第3页
第3页 / 共45页
点击查看更多>>
资源描述
Struts2 标记库,本讲要点与教学目标,【教学要点】 1、Struts2标记库的特性 2、Web处理结果的存储方式-值栈(ValueStack) 3、OGNL的应用 4、国际化支持 【教学目标】 了解Struts2标记库的特性,理解Web对请求处理结果的存储方式与存储特点,掌握OGNL的应用。,Struts2标记库的特性,【引言】 在前面的章节中,我们讲了Action处理客户端的请求,以及处理请求时拦截器所起的作用。 (1)在完成了请求处理后还需要做什么? -将处理得到的结果数据展示给用户。 (2)在MVC模型中哪个组件实现结果数据的展示? -视图 (3)Struts2下的数据如何存储?视图组件如何访问和展示这些数据? -OGNL与Struts2标记,Struts2标记库的特性,【标记库概述】 1、标记库 在JSP页面中除了可以使用HTML的静态标记和JSP2.0规范中的标准动作外,还可以引用外部的标记库,如: JavaEE5.0规范中提供了JSP标准标记库(JSTL) FCKEditor组件中提供了FCKEditor标记库 用户也可以开发自己的标记库并使用 标记的功能本质上是由该标记关联的一个类实现的 2、外部标记库的组成 一组标记类、一个标签库文件(tld文件)阅读struts-tags.tld 3、外部标记库的引用 在JSP中通过指令引用,Web处理结果的存储方式,【Web数据存储】可以分为两部分: (1)Value Stack :值栈,每次在Action组件调用之前,框架都会创建一个ValueStack对象。用来存储与Action请求处理相关的Action组件以及模型对象 (2)Stack Context:栈环境,用来存储本次请求相关的Web运行环境信息,如应用上下文、会话和响应等 【在JSP中查看值栈】 可以输出整个ActionContext中的数据,标记的语言-OGNL,OGNLObject Graph Navigation Language(对象图导航语言)是一种功能强大的表达式语言,可以通过简单的表达式来访问Struts2中的数据。 OGNL表达式一般与Struts2标记一起使用,访问Web数据分为两种情况(Value Stack /Stack Context): 对Value Stack中的数据:直接对属性进行访问,如果该属性类型是对象,则可以使用点语法获取其内部属性 如: 对Stack Context中的环境数据:对其属性的访问要求以“#”号开始 如:,Struts2标记的种类,1、控制标记 主要包含用于实现分支,循环等流程控制的标签 如:if elseif else iterator 2、数据标记 主要提供各种数据访问相关的功能 如:action property debug bean 等 3、UI标记 表单标记:允许客户端提交信息 非表单标记:显示错误信息、支持Ajax,控制标记,if、elseif、else:实现分支控制功能 iterator:将集合进行迭代输出(循环) append、merge:对集合进行合并操作 generator:将一个字符串解析成一个集合 sort:将集合排序 subset:取集合子集,if、elseif、else,【描述】 1、if可以单独使用,也可与else、elseif搭配使用 2、if和elseif有一个必选类属性test,用来实现逻辑判断,test属性类型是OGNL逻辑表达式 3、标签体的内容可以是JSP网页元素,if、elseif、else,age= 儿童 青年 老年 ,迭代控制标记- iterator,【描述】 用于遍历集合(java.util.Collection的子类)中的元素:List、Set、Map和数组 该标签的属性如下: id:指定集合中元素的ID引用 value:用来指定被迭代输出的集合,通常由OGNL表达式指定 status:代表当前迭代元素的状态,是IteratorStatus实例,IteratorStauts实例包含方法,int getCount():返回当前迭代过元素的总数。 int getIndex():返回当前迭代元素的索引。 boolean isEven():判断当前迭元素是否为偶数行。 boolean isOdd():判断当前迭元素是否为奇数行。 boolean isFirst():判断当前迭元素是否为第一个元素。 boolean isLast():判断当前迭元素是否为最后一个元素 IteratorStauts的这些方法分别对应了count, index,even,odd,first,last属性,例1:不使用status属性的迭代,【说明】 value=“1,2,3“:表示集合,默认为List, | ,例2:使用status属性的迭代,【说明】status=“st“,声明的st是一个局部对象,只能在迭代体中使用,其值临时保存在Stack Context中,取其属性时以“#“号开始,例3:Map类型元素的迭代,Map类型元素 常量式为:#key1:value1,key2:value2,其它元素, : ,数据标记概述,property 用于输出value属性指定的值 action 用于在JSP页面中调用一个Action,如果指定其executeResult,则可以将Action处理结果包含到JSP中 bean 用于创建一个JavaBean实例,如果指定其id属性,则可以将创建的实例放到stack context中 param 用于设置一个参数,一般作为其它标记的子标记,数据标记概述,set 设置一个新变量,并可以将新变量放到指定的范围中 push 用于将某个值放到Value Stack的栈顶 include 在JSP页面中包含其他JSP或Servlet资源 url 用于生成一个URL地址 date 用于格式化输出一个日期 debug 生成一个调试链接,property,【property标签属性】 value:指定需要输出的属性值,如果没有指定则默认输出value stack栈顶对象 default:指定默认输出值,当要输出的值为null时输出 escape:是否转义输出内容中的HTML(默认true) true时转义输出: false时直接输出: 换行,action、param标记,【action属性】 id:此Action在页面中的引用标识 name:要引用的action的名字 namespace:action所在的命名空间 executeResult:是否将结果包含到当前页中(false) 【param属性】 name:要传入的参数名 标记体中的内容以String类型传入的参数值,例6:action标记的使用,【案例说明】 在index.jsp中引用Action,并将其结果视图的内容包含到当前页中 【基本步骤】 1、创建Action类:InAction,定义一个属性name, 2、在struts.xml中配置Action的名字为“in“,所在包的namespace=“/“,视图为in_success.jsp 3、创建in_success.jsp,核心代码, 被包含的action视图:name- ,例6:action标记的使用,4、在index.jsp中加入如下代码: 5、分析运行结果,查看Action Context中的数据,是否有inaction1、inaction2两个属性, hello ,bean标记,【属性】 id:用于引用该bean对象,如果指定该属性,框架将其放到Stack Context中 name:指定要实例化的JavaBean类 例: 测试分析 Stack Context中的信息变化, 金毛 输出Bean对象的属性: ,set标记,【属性】 name:新创建的变量名 id:用于引用该元素 说明:如果没有id,则用name值引用变量,id优先 scope:存放的范围 application session request page action,默认放置在Stack Context中 value:指定赋给变量的值 例:, 输出变量dd的属性值:,date标记,【属性】 name:要格式化的日期值 id:引用元素的id format:指定日期输出格式, 今天的日期是(原始格式): 今天是(MM/dd/yyyy):,什么是国际化?,在很多国际化的网站中,可根据不同国家地区设置不同语言的版本,以方便不同国家和地区的用户访问, 如:清华大学网站 Google网站:.hk/,什么是国际化?,【国际化(internationalization,i18n)】是指在设计软件时使软件具有支持多种语言的功能。能够在创建不同语言版本时,无须修改应用程序源代码。 【软件国际化的特征】 (1)可扩展性:支持新语言时,不需要修改程序,不需要重新编译。通过增加和修改资源文件,可以增加对某种语言的支持、实现订制指定语言的界面显示 (2)全球化:能够运行于不同区域语言环境中,可以支持不同区域的语言文字和数据信息的输入、输出、显示和存储 (3)本地化:满足特定区域和语言环境,信息的输入和输出能够符合该区域的使用习惯,例如日期显示格式。,什么是国际化?,【国际化涉及的方面】 (1)静态的文字显示 (2)与区域习惯相关的内容,如:日期时间、邮政编码、电话号码、地址、货币、度量等 (3)提示信息,如:警告、错误、操作提示、在线帮助等 【国际化的实施】 国际化不是在产品功能和代码基本完成后的一个附加阶段,而是应该从软件需求分析开始,并贯穿软件项目实施的全过程,一、Java国际化,【相关类】 Java国际化主要使用3个类完成:Locale、ResourceBoundle、MessageFormat 【Locale类】对应一个特定区域和语言环境 (1)静态方法:Locale getDefault() (2)静态常量标识符:US、CHINA、JAPAN,CHINESE等 (3)获取国家、语言名:getCountry()、getLanguage() (4)获取适于显示的国家、语言名 getDisplayCountry()、getDisplayLanguage(),案例1:Locale类的基本应用,public class Test public static void main(String args) Locale locales = Locale.getAvailableLocales(); /获取Java支持的语言和区域 for (int i = 0; i “ +localesi.getDisplayLanguage()+“-“ +localesi.getDisplayCountry(); Locale lo=Locale.getDefault();/获取本地系统默认的Locale对象 System.out.println(lo.getCountry()+“,“+lo.getDisplayCountry(); System.out.println(lo.getLanguage()+“,“+lo.getDisplayLanguage(); ,一、Java国际化,【ResourceBundle类】用于加载一个资源文件 资源包是一组资源文件,特点是基本名相同,在此基础上按一定命名规范进行扩展。命名规范如下: 基本名_语言名_国家名_开发商或浏览器.properties 其中最后一个扩展项“_开发商或浏览器”很少用 如下就是一组资源名为message的资源包 message.properties message_zh.properties message_zh_CN.properties,一、Java国际化,获取资源对象的方法 (1)ResourceBundle getBundle(String baseName)使用指定的基本名称、默认的语言环境获取资源对象。 (2)ResourceBundle getBundle(String baseName,Locale locale)使用指定的基本名称和语言环境获取资源对象。 说明 (1)参数baseName是具有完整路径的基本名 (2)资源文件内容是标准的键值对(key-value)格式 获取键值的方法:String getString(String key),一、 Java国际化,【Java国际化基本步骤】 (1)创建资源文件:为准备支持的Locale编写对应的资源文件 (2)设置Locale:在程序中的某个地方,提供Locale的设置,或者将设置放入配置文件中 (3)根据Locale创建指定的资源绑定对象 (4)通过资源绑定对象获取与Locale相关的信息,案例2:Java国际化,【具体步骤】 1、创建资源文件。为了实现程序国际化,本例创建两个资源文件Message_zh_CN.properties、Message_en_US.properties 2、创建一个Test类 main方法中的关键代码,Locale lo=Locale.getDefault();/获取本地系统默认的Locale对象 ResourceBundle rb = ResourceBundle.getBundle(“i18n.Message“,lo); System.out.println(rb.getString(“promote“); System.out.println(rb.getString(“welcome“);,案例2:Java国际化,3、运行测试: 4、将Locale lo=Locale.getDefault();改为: Locale lo=Locale.US; 运行测试:,二、 Struts2对国际化的支持,【Struts2的国际化支持】 (1)Action组件的基类ActionSupport实现了TextProvider接口,该接口有一个方法getText(String key),用来从资源绑定对象中获取指定信息资源 (2)每个Action组件,不需要手动创建资源绑定对象,框架将自动创建该对象 (3)不需要手动获取Locale对象,框架将自动检测Web请求的Locale属性,并根据它动态关联资源文件 (4)提供了、等标记访问本地化信息 即:开发人员把准备好的相应资源文件放到合适的位置,然后在需要显示本地化信息的位置调用资源文件中的信息即可。,三、访问国际化消息的方法,1、Action中访问国际化消息:getText(String key) 2、JSP中访问国际化消息有三种方法: (1) 如: (2) 如: (3)Struts2的UI标记中用国际化信息设置label属性时,不直接对label设置,而使用key属性,即:key=“keyName“ 如: ,四、Struts2国际化级别,【Action级】 仅在指定的Action及视图中使用,资源文件基本名是Action类名,其位置与Action组件同一个目录, 【包级】 在指定包中的所有Action及视图中使用,资源文件基本名必须是package,其位置与Action组件同一个目录 【应用级】如果用到国际化,就要使用应用级的国际化 应用程序中所有Action及视图中使用,其位置必须放在根目录,其基本名可以任意,但必须在struts.xml中进行常量声明, 如: 【临时指定】标记可临时指定资源文件,有效范围在该标记内,案例5:应用级资源文件的使用(登录),【案例要求】 使用应用级的国际化资源文件对用户登录业务实现国际化 【案例分析】 与语言环境相关的内容:登录页中的输入提示、登录成功的欢迎提示 针对以上内容编写资源文件,并在视图中输出与语言环境相关的信息,案例5:应用级资源文件的使用(登录),【基本步骤】 1、在根目录下创建2个国际化资源文件,支持2种语言环境 2、在struts.xml中配置资源文件常量 3、创建用户登录页login.jsp和登录成功页index.jsp,并将页面中的与语言环境相关的信息使用国际化输出 4、创建和配置Action组件 (1)创建Action组件DoLoginAction并配置,实现用户模拟登录) (2)在struts.xml中直接配置名为“login”的Action组件,success视图为login.jsp,(使用默认的ActionSupport类,案例5:应用级资源文件的使用(登录),1、在根目录下创建两个资源文件 (1)i18n_en_US.properties (2)i18n.properties 2、在struts.xml中配置资源文件常量,login.title=user login page login.username=username login.password=password login_submit=login home.title=login success! home.greeting=welcome you!,案例5:应用级资源文件的使用(登录),3、创建视图 (1)login.jsp,案例5:应用级资源文件的使用(登录),3、创建视图 (2)home.jsp,案例5:应用级资源文件的使用(登录),4、Action组件 (1)DoLoginAction.java,/属性 private String username; private String password; /省略getter/setter方法 /execute方法 public String execute() throws Exception if(“lucky“.equals(username) ,案例5:应用级资源文件的使用(登录),4、Action组件 (2)struts.xml中配置 5、修改浏览器默认语言环境并执行验证, /login.jsp /home.jsp /login.jsp ,小结,标记库概述 Struts2标记库的特性 采用OGNL作为表达式语言 Web请求处理结果数据的存储方式 Value Stack值栈 Context Stack上下文(环境)栈 标记的语言OGNL 可以方便获取值栈、上下文栈中数据,
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!