收藏 分销(赏)

struts2标记库.ppt

上传人:a199****6536 文档编号:1974500 上传时间:2024-05-13 格式:PPT 页数:45 大小:937.54KB
下载 相关 举报
struts2标记库.ppt_第1页
第1页 / 共45页
struts2标记库.ppt_第2页
第2页 / 共45页
struts2标记库.ppt_第3页
第3页 / 共45页
struts2标记库.ppt_第4页
第4页 / 共45页
struts2标记库.ppt_第5页
第5页 / 共45页
点击查看更多>>
资源描述

1、Struts2Struts2标记库标记库标记库标记库本讲要点与教学目标【教学要点教学要点教学要点教学要点】1、Struts2标记库的特性标记库的特性 2、Web处理结果的存储方式处理结果的存储方式-值栈(值栈(ValueStack)3、OGNL的应用的应用4、国际化支持、国际化支持【教学目标教学目标教学目标教学目标】了解了解Struts2标记库的特性,理解标记库的特性,理解Web对请求处理对请求处理结果的存储方式与存储特点,掌握结果的存储方式与存储特点,掌握OGNL的应用的应用。2021/5/182Struts2标记库的特性【引言引言】在前面的章节中,我们讲了Action处理客户端的请求,以及

2、处理请求时拦截器所起的作用。(1)在完成了请求处理后还需要做什么?)在完成了请求处理后还需要做什么?-将将处理得到的处理得到的结果数据展示给用户结果数据展示给用户。(2)在)在MVC模型中哪个组件实现结果数据的展示?模型中哪个组件实现结果数据的展示?-视图视图(3)Struts2下的数据如何存储?视图组件如何访问和展示下的数据如何存储?视图组件如何访问和展示这些数据?这些数据?-OGNL与与Struts2标记标记2021/5/183Struts2标记库的特性【标记库概述标记库概述】1、标记库在在JSP页面中除了可以使用页面中除了可以使用HTML的静态标记和的静态标记和JSP2.0规范中的标准动

3、作规范中的标准动作外,还可以引用外部的标记库外,还可以引用外部的标记库,如:,如:JavaEE5.0规范中提供了JSP标准标记库(JSTL)FCKEditor组件中提供了FCKEditor标记库用户也可以开发自己的标记库并使用标记的功能本质上是由该标记关联的一个类实现的标记的功能本质上是由该标记关联的一个类实现的 2、外部标记库的组成一组标记类、一个标签库文件(一组标记类、一个标签库文件(tld文件)文件)阅读阅读struts-tags.tld 3、外部标记库的引用在在JSP中通过指令中通过指令引用引用2021/5/184Web处理结果的存储方式【Web数据存储数据存储】可以分为两部分:(1)

4、Value Stack:值栈,每次在Action组件调用之前,框架都会创建一个ValueStack对象。用来存储与Action请求处理相关的Action组件以及模型对象(2)Stack Context:栈环境,用来存储本次请求相关的Web运行环境信息,如应用上下文、会话和响应等【在在JSP中查看值栈中查看值栈】可以输出整个ActionContext中的数据2021/5/185标记的语言-OGNL OGNLObject Graph Navigation Language(对象图导航语言)是一种功能强大的表达式语言,可以通过简单的表达式来访问Struts2中的数据。OGNL表达式一般与Struts

5、2标记一起使用,访问Web数据分为两种情况(Value Stack/Stack Context):对对Value Stack中的数据中的数据:直接对属性进行访问,如果该属性类型是对:直接对属性进行访问,如果该属性类型是对象,则可以使用点语法获取其内部属性象,则可以使用点语法获取其内部属性 如:如:对对Stack Context中的环境数据中的环境数据:对其属性的访问要求以:对其属性的访问要求以“#”号开始号开始 如:如:2021/5/186Struts2标记的种类w1、控制标记主要包含用于实现分支,循环等流程控制的标签主要包含用于实现分支,循环等流程控制的标签如:如:if elseif els

6、e iteratorw2、数据标记主要提供各种数据访问相关的功能主要提供各种数据访问相关的功能如:如:action property debug bean 等等w3、UI标记表单标记:允许客户端提交信息表单标记:允许客户端提交信息非表单标记:显示错误信息、支持非表单标记:显示错误信息、支持Ajax2021/5/187控制标记wif、elseif、else:实现分支控制功能:实现分支控制功能witerator:将集合进行迭代输出(循环):将集合进行迭代输出(循环)wappend、merge:对集合进行合并操作wgenerator:将一个字符串解析成一个集合wsort:将集合排序wsubset:取

7、集合子集2021/5/188if、elseif、else【描述描述】w1、if可以单独使用,也可与else、elseif搭配使用w2、if和elseif有一个必选类属性test,用来实现逻辑判断,test属性类型是OGNL逻辑表达式w3、标签体的内容可以是JSP网页元素2021/5/189if、elseif、elseage=s:property value=age=s:property value=age=/s:if s:if s:if testtesttest=#parameters.age016#parameters.age016#parameters.age0 儿儿儿童童童 s:else

8、if s:elseif s:elseif testtesttest=#parameters.age060#parameters.age060#parameters.age0 青青青年年年 老年老年老年老年老年老年 2021/5/1810迭代控制标记-iterator【描述描述】w用于遍历集合(java.util.Collection的子类)中的元素:List、Set、Map和数组 w该标签的属性如下:id:指定集合中元素的:指定集合中元素的ID引用引用value:用来指定被迭代输出的集合,通常由:用来指定被迭代输出的集合,通常由OGNL表达式指定表达式指定status:代表当前迭代元素的状态,

9、是:代表当前迭代元素的状态,是IteratorStatus实例实例2021/5/1811IteratorStauts实例包含方法wint getCount():返回当前迭代过元素的总数。wint getIndex():返回当前迭代元素的索引。wboolean isEven():判断当前迭元素是否为偶数行。wboolean isOdd():判断当前迭元素是否为奇数行。wboolean isFirst():判断当前迭元素是否为第一个元素。wboolean isLast():判断当前迭元素是否为最后一个元素wIteratorStauts的这些方法分别对应了count,index,even,odd,f

10、irst,last属性2021/5/1812例1:不使用status属性的迭代【说明】value=1,2,3 value=1,2,3:表示集合,默认为表示集合,默认为ListList|2021/5/1813例2:使用status属性的迭代s:iterator value=s:iterator value=s:if test=s:if test=.even.even s:property value=s:property value=.index+1/.index+1/ s:property value= s:property value= /s:property

11、value=s:property value=.index+1/.index+1/ s:property value= s:property value= /【说明】statusstatus=stst,声明的,声明的stst是一个局部对象,只能在迭代体中使用是一个局部对象,只能在迭代体中使用,其值临时保存在Stack Context中,取其属性时以#号开始2021/5/1814例3:Map类型元素的迭代wMap类型元素常量式为:常量式为:#key1:value1,key2:value2,其它元素其它元素s:iterator s:iterator status=st

12、status=st   :2021/5/1815数据标记概述wproperty用于输出用于输出value属性指定的值属性指定的值waction用于在用于在JSP页面中调用一个页面中调用一个Action,如果指定其,如果指定其executeResult,则可以将,则可以将Action处理结果包含到处理结果包含到JSP中中wbean用于创建一个用于创建一个JavaBean实例,如果指定其实例,如果指定其id属性,则可以将创建属性,则可以将创建的实例放到的实例放到stack context中中wparam用于设置一个参数,一般作为其它标记的子标记用于设置一个参数,一般作

13、为其它标记的子标记2021/5/1816数据标记概述wset设置一个新变量,并可以将新变量放到指定的范围中设置一个新变量,并可以将新变量放到指定的范围中wpush用于将某个值放到用于将某个值放到Value Stack的栈顶的栈顶winclude在在JSP页面中包含其他页面中包含其他JSP或或Servlet资源资源wurl用于生成一个用于生成一个URL地址地址wdate用于格式化输出一个日期用于格式化输出一个日期wdebug生成一个调试链接生成一个调试链接2021/5/1817property【property标签属性标签属性】wvalue:指定需要输出的属性值,如果没有指定则默认输出value

14、 stack栈顶对象wdefault:指定默认输出值,当要输出的值为null时输出wescape:是否转义输出内容中的HTML(默认true)true时转义输出:时转义输出:<br>false时直接输出:时直接输出:换行换行s:property value=username default=s:property value=username default=/2021/5/1818action、param标记【action属性】wid:此Action在页面中的引用标识wname:要引用的action的名字wnamespace:action所在的命名空间wexecuteResult:

15、是否将结果包含到当前页中(false)【param属性】wname:要传入的参数名w标记体中的内容以String类型传入的参数值2021/5/1819例6:action标记的使用【案例说明】在index.jsp中引用Action,并将其结果视图的内容包含到当前页中【基本步骤】1、创建Action类:InAction,定义一个属性name,2、在struts.xml中配置Action的名字为in,所在包的namespace=/,视图为in_success.jsp 3、创建in_success.jsp,核心代码被包含的被包含的被包含的actionactionaction视图视图视图:name-s:

16、property value=name default=:name-s:property value=name default=:name-/2021/5/1820例6:action标记的使用4、在index.jsp中加入如下代码:5、分析运行结果,查看Action Context中的数据,是否有inaction1、inaction2两个属性s:actions:action namespace=/namespace=/hello hello hellos:action s:action namespace=/namespace=/2021/5/1821bean标记【属性】wid:用于引用该be

17、an对象,如果指定该属性,框架将其放到Stack Context中wname:指定要实例化的JavaBean类例:例:w测试分析 Stack Context中的信息变化 金毛金毛金毛 输输输出出出BeanBeanBean对对对象的象的象的属属属性:性:性:2021/5/1822set标记【属性】wname:新创建的变量名wid:用于引用该元素说明:如果没有说明:如果没有id,则用,则用name值引用变量,值引用变量,id优先优先wscope:存放的范围application session request page action,默认放置在,默认放置在Stack Context中中wvalue

18、:指定赋给变量的值例:例:输输输出出出变变变量量量dddddd的的的属属属性性性值值值:2021/5/1823date标记【属性】wname:要格式化的日期值wid:引用元素的idwformat:指定日期输出格式今天的日期是(原始格式):今天的日期是(原始格式):今天的日期是(原始格式):今天是(今天是(今天是(MM/dd/yyyyMM/dd/yyyyMM/dd/yyyy):):):2021/5/1824什么是国际化?w在很多国际化的网站中,可根据不同国家地区设置不同语言的版本,以方便不同国家和地区的用户访问,如:清华大学网站 Google网站:http:/.hk/2021/5/1825什么是

19、国际化?【国际化国际化(internationalization,i18n)】是指在设计软件时使软件具有支持多种语言的功能。能够在创建不同语言版本时,无须修改应用程序源代码。【软件国际化的特征软件国际化的特征】(1)可扩展性:)可扩展性:支持新语言时,不需要修改程序,不需要重新编译。通过增加和修改资源文件,可以增加对某种语言的支持、实现订制指定语言的界面显示(2)全球化:)全球化:能够运行于不同区域语言环境中,可以支持不同区域的语言文字和数据信息的输入、输出、显示和存储(3)本地化:)本地化:满足特定区域和语言环境,信息的输入和输出能够符合该区域的使用习惯,例如日期显示格式。2021/5/18

20、26什么是国际化?【国际化涉及的方面国际化涉及的方面】(1)静态的文字显示(2)与区域习惯相关的内容,如:日期时间、邮政编码、电话号码、地址、货币、度量等(3)提示信息,如:警告、错误、操作提示、在线帮助等【国际化的实施国际化的实施】国际化不是在产品功能和代码基本完成后的一个附加阶段,而是应该从软件需求分析开始,并贯穿软件项目实施的全过程2021/5/1827一、Java国际化【相关类相关类】Java国际化主要使用3个类完成:Locale、ResourceBoundle、MessageFormat【Locale类类】对应一个特定区域和语言环境对应一个特定区域和语言环境(1)静态方法:Local

21、e getDefault()(2)静态常量标识符:US、CHINA、JAPAN,CHINESE等(3)获取国家、语言名:getCountry()、getLanguage()(4)获取适于显示的国家、语言名 getDisplayCountry()、getDisplayLanguage()2021/5/1828案例1:Locale类的基本应用publicpublicpublic classclassclass Test Test Test public public public staticstaticstatic voidvoidvoid main(String args)main(Strin

22、g args)main(String args)Locale locales=Locale.Locale locales=Locale.Locale locales=Locale.getAvailableLocalesgetAvailableLocalesgetAvailableLocales();();();/获取获取获取获取获取获取JavaJavaJava支持的语言和区域支持的语言和区域支持的语言和区域支持的语言和区域支持的语言和区域支持的语言和区域 forforfor(intintint i=0;i locales.length;i+)i=0;i locales.length;i+)i=

23、0;i.println(localesi+-.println(localesi+-+localesi.getDisplayLanguage()+-+localesi.getDisplayLanguage()+-+localesi.getDisplayLanguage()+-+localesi.getDisplayCountry();+localesi.getDisplayCountry();+localesi.getDisplayCountry();Locale lo=Locale.Locale lo=Locale.Locale lo=Locale.getDefaultgetDefaultge

24、tDefault();();();/获取本地系统默认的获取本地系统默认的获取本地系统默认的获取本地系统默认的获取本地系统默认的获取本地系统默认的LocaleLocaleLocale对象对象对象对象对象对象 System.System.System.outoutout.println(lo.getCountry()+,+lo.getDisplayCountry();.println(lo.getCountry()+,+lo.getDisplayCountry();.println(lo.getCountry()+,+lo.getDisplayCountry();System.System.Sys

25、tem.outoutout.println(lo.getLanguage()+,+lo.getDisplayLanguage();.println(lo.getLanguage()+,+lo.getDisplayLanguage();.println(lo.getLanguage()+,+lo.getDisplayLanguage();2021/5/1829一、Java国际化【ResourceBundleResourceBundle类类类类】用于加载一个资源文件用于加载一个资源文件用于加载一个资源文件用于加载一个资源文件 资源包是一组资源文件,特点资源包是一组资源文件,特点是基本名相同,在此基

26、础上是基本名相同,在此基础上按一定命名规范进行扩展按一定命名规范进行扩展。命名规范如下:。命名规范如下:基本名基本名基本名基本名_ _语言名语言名语言名语言名_ _国家名国家名国家名国家名_ _开发商或浏览器开发商或浏览器开发商或浏览器开发商或浏览器.properties.properties 其中最后一个扩展项其中最后一个扩展项“_ _开发商或浏览器开发商或浏览器”很少用很少用 如下就是一组资源名为如下就是一组资源名为messagemessage的资源包的资源包 messagemessage.properties.properties messagemessage_zh.properties

27、_zh.properties messagemessage_zh_CN.properties_zh_CN.properties2021/5/1830一、Java国际化获取资源对象的方法获取资源对象的方法(1 1)ResourceBundle getBundle(String baseName)ResourceBundle getBundle(String baseName)使用指使用指定的基本名称、默认的语言环境获取资源定的基本名称、默认的语言环境获取资源对象对象。(2 2)ResourceBundle getBundle(String baseName,Locale ResourceBund

28、le getBundle(String baseName,Locale locale)locale)使用指定的基本名称和语言环境获取资源使用指定的基本名称和语言环境获取资源对象对象。说明说明(1 1)参数)参数baseNamebaseName是是具有完整路径的基本名具有完整路径的基本名(2 2)资源文件内容是标准的键值对()资源文件内容是标准的键值对(key-valuekey-value)格式)格式获取键值的方法:获取键值的方法:String getString(String key)String getString(String key)2021/5/1831一、Java国际化【JavaJa

29、va国际化基本步骤国际化基本步骤国际化基本步骤国际化基本步骤】(1 1)创建资源文件:为准备支持的)创建资源文件:为准备支持的LocaleLocale编写对应的资源文编写对应的资源文件件(2 2)设置)设置LocaleLocale:在程序中的某个地方,提供:在程序中的某个地方,提供LocaleLocale的设置,的设置,或者将设置放入配置文件中或者将设置放入配置文件中(3 3)根据)根据LocaleLocale创建指定的资源绑定对象创建指定的资源绑定对象(4 4)通过资源绑定对象获取与)通过资源绑定对象获取与LocaleLocale相关的信息相关的信息2021/5/1832案例2:Java国际

30、化【具体步骤具体步骤】1、创建资源文件。为了实现程序国际化,本例创建两个资源文件Message_zh_CN.properties、Message_en_US.properties 2、创建一个Test类 main方法中的关键代码Locale lo=Locale.Locale lo=Locale.Locale lo=Locale.getDefaultgetDefaultgetDefault();/();/();/获取本地系统默认的获取本地系统默认的获取本地系统默认的LocaleLocaleLocale对象对象对象ResourceBundle rb=ResourceBundle.ResourceB

31、undle rb=ResourceBundle.ResourceBundle rb=ResourceBundle.getBundlegetBundlegetBundle(i18n.Message,lo);(i18n.Message,lo);(i18n.Message,lo);System.System.System.outoutout.println(rb.getString(promote);.println(rb.getString(promote);.println(rb.getString(promote);System.System.System.outoutout.println(

32、rb.getString(welcome);.println(rb.getString(welcome);.println(rb.getString(welcome);2021/5/1833案例2:Java国际化3 3、运行测试:、运行测试:4 4、将、将Locale lo=Locale.Locale lo=Locale.getDefaultgetDefault();();改为:改为:Locale lo=Locale.US;Locale lo=Locale.US;运行测试:运行测试:2021/5/1834二、Struts2对国际化的支持【Struts2Struts2的国际化支持的国际化支持的国

33、际化支持的国际化支持】(1 1)ActionAction组件的基类组件的基类ActionSupportActionSupport实现了实现了TextProviderTextProvider接接口,该接口有一个方法口,该接口有一个方法getText(String key)getText(String key),用来从资源绑定用来从资源绑定对象中获取指定信息资源对象中获取指定信息资源(2 2)每个)每个ActionAction组件,不需要手动创建资源绑定对象,框架组件,不需要手动创建资源绑定对象,框架将自动创建该对象将自动创建该对象(3 3)不需要手动获取)不需要手动获取LocaleLocale对

34、象,框架将自动检测对象,框架将自动检测WebWeb请求请求的的LocaleLocale属性,并根据它动态关联资源文件属性,并根据它动态关联资源文件(4 4)提供了)提供了、等标记访问本地化信息等标记访问本地化信息即:开发人员把准备好的相应即:开发人员把准备好的相应资源文件放到合适的位置资源文件放到合适的位置资源文件放到合适的位置资源文件放到合适的位置,然,然后后在需要显示本地化信息的位置调用资源文件中的信息在需要显示本地化信息的位置调用资源文件中的信息在需要显示本地化信息的位置调用资源文件中的信息在需要显示本地化信息的位置调用资源文件中的信息即可。即可。2021/5/1835三、访问国际化消息

35、的方法1、Action中访问国际化消息:getText(String key)2、JSP中访问国际化消息有三种方法:(1)如:(2)如:(3)Struts2的UI标记中用国际化信息设置label属性时,不直接对label设置,而使用key属性,即:key=keyName“如:2021/5/1836四、Struts2国际化级别【Action级级】仅在指定的Action及视图中使用,资源文件基本名是基本名是Action类名类名,其位置位置与Action组件同一个目录,【包级包级】在指定包中的所有Action及视图中使用,资源文件基本名基本名必须是package,其位置位置与Action组件同一个目

36、录【应用级应用级】如果用到国际化,就要如果用到国际化,就要使用应用级使用应用级的国际化的国际化 应用程序中所有Action及视图中使用,其位置必须放在根目录,其基本名可以任意,但必须在struts.xml中进行常量声明,如:【临时指定临时指定】标记可临时指定资源文件,有效范围在该标记内2021/5/1837案例5:应用级资源文件的使用(登录)【案例要求案例要求案例要求案例要求】使用应用级的国际化资源文件对用户登录业务实现国际化使用应用级的国际化资源文件对用户登录业务实现国际化【案例分析案例分析案例分析案例分析】与语言环境相关的内容:与语言环境相关的内容:登录页中的输入提示、登录成功登录页中的输

37、入提示、登录成功登录页中的输入提示、登录成功登录页中的输入提示、登录成功的欢迎提示的欢迎提示的欢迎提示的欢迎提示 针对以上内容编写资源文件,并在视图中输出与语言环境针对以上内容编写资源文件,并在视图中输出与语言环境相关的信息相关的信息2021/5/1838案例5:应用级资源文件的使用(登录)【基本步骤基本步骤基本步骤基本步骤】1 1、在根目录下创建、在根目录下创建2 2个国际化资源文件,支持个国际化资源文件,支持2 2种语言环境种语言环境 2 2、在、在struts.xmlstruts.xml中配置资源文件常量中配置资源文件常量 3 3、创建用户登录页、创建用户登录页login.jsplogi

38、n.jsp和登录成功页和登录成功页index.jspindex.jsp,并将页,并将页面中的与语言环境相关的信息使用国际化输出面中的与语言环境相关的信息使用国际化输出 4 4、创建和配置、创建和配置ActionAction组件组件(1 1)创建)创建ActionAction组件组件DoLoginActionDoLoginAction并配置,实现用户模拟登并配置,实现用户模拟登录)录)(2 2)在)在struts.xmlstruts.xml中直接配置名为中直接配置名为“login”login”的的ActionAction组件,组件,successsuccess视图为视图为login.jsplog

39、in.jsp,(使用默认的,(使用默认的ActionSupportActionSupport类类2021/5/1839案例5:应用级资源文件的使用(登录)1、在根目录下创建两个资源文件(1)i18n_en_US.properties(2)i18n.properties2、在struts.xml中配置资源文件常量login.title=user login page login.title=user login page login.title=user login page login.username=usernamelogin.username=usernamelogin.username

40、=usernamelogin.password=passwordlogin.password=passwordlogin.password=passwordlogin_submit=loginlogin_submit=loginlogin_submit=loginhome.title=login success!home.title=login success!home.title=login success!home.greeting=welcome you!home.greeting=welcome you!home.greeting=welcome you!2021/5/1840案例5:

41、应用级资源文件的使用(登录)3、创建视图(1)login.jsp2021/5/1841案例5:应用级资源文件的使用(登录)3、创建视图(2)home.jsp2021/5/1842案例5:应用级资源文件的使用(登录)4、Action组件(1)DoLoginAction.java/属性属性属性privateprivateprivate String username;String username;String username;privateprivateprivate String password;String password;String password;/省略省略省略省略省略省略ge

42、tter/settergetter/settergetter/setter方法方法方法方法方法方法/execute/execute/execute方法方法方法方法方法方法publicpublicpublic String execute()String execute()String execute()throwsthrowsthrows Exception Exception Exception if if if(lucky.equals(username)&123.equals(password)(lucky.equals(username)&123.equals(password)(lu

43、cky.equals(username)&123.equals(password)return return return SUCCESSSUCCESSSUCCESS;return return return INPUTINPUTINPUT;2021/5/1843案例5:应用级资源文件的使用(登录)4、Action组件(2)struts.xml中配置5、修改浏览器默认语言环境并执行验证 /login.jsp /login.jsp /login.jsp /home.jsp /home.jsp /home.jsp /login.jsp /login.jsp /login.jsp 2021/5/1844小结w标记库概述Struts2标记库的特性标记库的特性采用OGNL作为表达式语言wWeb请求处理结果数据的存储方式Value Stack值栈值栈Context Stack上下文(环境)栈上下文(环境)栈w标记的语言OGNL可以方便获取值栈、上下文栈中数据可以方便获取值栈、上下文栈中数据2021/5/1845

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服