资源描述
CONFIDENTIALJava高级框架应用开发高级框架应用开发案例教程案例教程(四四)Struts2标签标签2 北京亚思晟北京亚思晟北京亚思晟北京亚思晟 科技有限公司科技有限公司科技有限公司科技有限公司主要内容4.1 一般标签4.2 UI标签4.3 Struts 2中的表达式语言4.4 工程案例3 北京亚思晟北京亚思晟北京亚思晟北京亚思晟 科技有限公司科技有限公司科技有限公司科技有限公司4.1一般标签一般标签4.1一般标签一般标签1if、elseif和和else1描述:执行根本的条件流转。描述:执行根本的条件流转。2参数如表参数如表4-1所示。所示。4 北京亚思晟北京亚思晟北京亚思晟北京亚思晟 科技有限公司科技有限公司科技有限公司科技有限公司4.1一般标签一般标签3实例:实例:WillNotBeExecutedhere111WillBeExecutedhere222WillNotBeExecutedhere3335 北京亚思晟北京亚思晟北京亚思晟北京亚思晟 科技有限公司科技有限公司科技有限公司科技有限公司4.1一般标签一般标签2)iterator(1)描述:描述:用于遍历集合或枚举值。用于遍历集合或枚举值。(2)参数如表参数如表4-2所示。所示。6 北京亚思晟北京亚思晟北京亚思晟北京亚思晟 科技有限公司科技有限公司科技有限公司科技有限公司4.1一般标签一般标签(3)实例:实例:%Listlist=newArrayList();list.add(Leon);list.add(John);list.add(Peter);list.add(Jeff);list.add(Linda);request.setAttribute(names,list);%Names:奇数行奇数行:偶数行偶数行:7 北京亚思晟北京亚思晟北京亚思晟北京亚思晟 科技有限公司科技有限公司科技有限公司科技有限公司4.1一般标签一般标签3sort(1)描述描述接受集合和比较器作为参数,对集合进行排序。如果声明了接受集合和比较器作为参数,对集合进行排序。如果声明了var属性属性,排序后的集排序后的集合会使用合会使用var作为键名放在作为键名放在PageContext中中(2)参数,如表参数,如表4-3所示。所示。8 北京亚思晟北京亚思晟北京亚思晟北京亚思晟 科技有限公司科技有限公司科技有限公司科技有限公司4.1一般标签一般标签3实例实例packagecom.ascent.util;importjava.util.Comparator;/*案例类案例类*sort标签比较器类标签比较器类/anli/tag/tag_sort.jsp中使用中使用*/publicclassMyComparatorimplementsComparator/按照字符串的长度比较按照字符串的长度比较publicintcompare(Objectelement1,Objectelement2)returnelement1.toString().length()-element2.toString().length();9 北京亚思晟北京亚思晟北京亚思晟北京亚思晟 科技有限公司科技有限公司科技有限公司科技有限公司4.1一般标签一般标签Sort标签测试页面代码如下:标签测试页面代码如下:trstyle=background-color:#bbbbbb10 北京亚思晟北京亚思晟北京亚思晟北京亚思晟 科技有限公司科技有限公司科技有限公司科技有限公司4.1一般标签一般标签4)Date(1)描述描述根据特定日期格式根据特定日期格式(例如例如.dd/MM/yyyyhh:mm),对日期对象进行多种形式的格式,对日期对象进行多种形式的格式化。化。(2)参数,如表参数,如表4-4所示。所示。11 北京亚思晟北京亚思晟北京亚思晟北京亚思晟 科技有限公司科技有限公司科技有限公司科技有限公司4.1一般标签一般标签(3)实例实例nice=false,且指定,且指定format=dd/MM/yyyynice=true,且指定,且指定format=dd/MM/yyyy指定指定nice=truenice=false,且没有指定,且没有指定format属性属性12 北京亚思晟北京亚思晟北京亚思晟北京亚思晟 科技有限公司科技有限公司科技有限公司科技有限公司4.1一般标签一般标签5i18n1描述:描述:加载资源包到值堆栈。它可以允许加载资源包到值堆栈。它可以允许text标志访问任何资源包的信息,而不只当前标志访问任何资源包的信息,而不只当前action相关联的资源包。相关联的资源包。2参数,如表参数,如表4-5所示。所示。13 北京亚思晟北京亚思晟北京亚思晟北京亚思晟 科技有限公司科技有限公司科技有限公司科技有限公司4.1一般标签一般标签3实例实例14 北京亚思晟北京亚思晟北京亚思晟北京亚思晟 科技有限公司科技有限公司科技有限公司科技有限公司4.1一般标签一般标签6include1描述:描述:包含一个包含一个servlet的输出的输出servlet或或jsp的页面。的页面。2参数,如表参数,如表4-6所示。所示。15 北京亚思晟北京亚思晟北京亚思晟北京亚思晟 科技有限公司科技有限公司科技有限公司科技有限公司4.1一般标签一般标签3实例:实例:使用使用s:include标签来包含目标页面标签来包含目标页面使用使用s:include标签来包含目标页面标签来包含目标页面16 北京亚思晟北京亚思晟北京亚思晟北京亚思晟 科技有限公司科技有限公司科技有限公司科技有限公司4.1一般标签一般标签include-file.jsp被包含的页面被包含的页面被包含的页面被包含的页面$param.author17 北京亚思晟北京亚思晟北京亚思晟北京亚思晟 科技有限公司科技有限公司科技有限公司科技有限公司4.1一般标签一般标签7param1描述:描述:为其他标签提供参数为其他标签提供参数,比方比方include标签和标签和bean标签标签.参数的参数的name属性是可选的属性是可选的,如果提供,会如果提供,会调用调用Component的方法的方法addParameter(String,Object),如果不提供,那么外层嵌套标签必须如果不提供,那么外层嵌套标签必须实现实现UnnamedParametric接口接口(如如TextTag)。2参数,如表参数,如表4-7所示。所示。18 北京亚思晟北京亚思晟北京亚思晟北京亚思晟 科技有限公司科技有限公司科技有限公司科技有限公司4.1一般标签一般标签3实例:实例:使用使用s:include标签来包含目标页面标签来包含目标页面使用使用s:include标签来包含目标页面标签来包含目标页面19 北京亚思晟北京亚思晟北京亚思晟北京亚思晟 科技有限公司科技有限公司科技有限公司科技有限公司4.1一般标签一般标签8property1描述:描述:得到得到value的属性的属性,如果如果value没提供没提供,默认为堆栈顶端的元素。默认为堆栈顶端的元素。2参数,如表参数,如表4-8所示。所示。20 北京亚思晟北京亚思晟北京亚思晟北京亚思晟 科技有限公司科技有限公司科技有限公司科技有限公司4.1一般标签一般标签3实例:实例:使用使用s:push来将某个值放入来将某个值放入ValueStack的栈顶的栈顶使用使用s:push来将某个值放入来将某个值放入ValueStack的栈顶的栈顶21 北京亚思晟北京亚思晟北京亚思晟北京亚思晟 科技有限公司科技有限公司科技有限公司科技有限公司4.1一般标签一般标签9set1描述:描述:set标签赋予变量一个特定范围内的值。当希望给一个变量赋一个复杂的表标签赋予变量一个特定范围内的值。当希望给一个变量赋一个复杂的表达式达式,每次访问该变量而不是复杂的表达式时用到。其在两种情况下非常有每次访问该变量而不是复杂的表达式时用到。其在两种情况下非常有用用:复杂的表达式很耗时复杂的表达式很耗时(性能提升性能提升)或者很难理解或者很难理解(代码可读性提高代码可读性提高)。2参数,如表参数,如表4-9所示。所示。22 北京亚思晟北京亚思晟北京亚思晟北京亚思晟 科技有限公司科技有限公司科技有限公司科技有限公司4.1一般标签一般标签3实例实例将将StackContext中的中的u值放入默认范围内。值放入默认范围内。23 北京亚思晟北京亚思晟北京亚思晟北京亚思晟 科技有限公司科技有限公司科技有限公司科技有限公司4.1一般标签一般标签10text1描述:描述:支持国际化信息的标签。国际化信息必须放在一个和当前支持国际化信息的标签。国际化信息必须放在一个和当前action同名的同名的resourcebundle中中,如果没有找到相应如果没有找到相应message,tagbody将被当作默认将被当作默认message,如果没有如果没有tagbody,message的的name会被作为默认会被作为默认message。2参数,如表参数,如表4-10所示。所示。24 北京亚思晟北京亚思晟北京亚思晟北京亚思晟 科技有限公司科技有限公司科技有限公司科技有限公司4.1一般标签一般标签3实例实例MrSmith25 北京亚思晟北京亚思晟北京亚思晟北京亚思晟 科技有限公司科技有限公司科技有限公司科技有限公司4.1一般标签一般标签11url1描述:描述:该标签用于创立该标签用于创立url,可以通可以通过过param标签提供标签提供request参数。当参数。当includeParams的值时的值时all或者或者get,param标签中定标签中定义的参数将有优先权义的参数将有优先权,也就也就是说其会覆盖其他同名参是说其会覆盖其他同名参数的值。数的值。2参数,如表参数,如表4-11所示。所示。26 北京亚思晟北京亚思晟北京亚思晟北京亚思晟 科技有限公司科技有限公司科技有限公司科技有限公司4.1一般标签一般标签3实例:实例:URLURL添加添加编辑编辑删除删除ahref=删除删除227 北京亚思晟北京亚思晟北京亚思晟北京亚思晟 科技有限公司科技有限公司科技有限公司科技有限公司4.2UI标签标签4.2UI标签标签UI标签又可以分为表单标签又可以分为表单UI和非表单和非表单UI两局部。表单两局部。表单UI局部根本与局部根本与Struts1.x相同,都是对相同,都是对HTML表单元素的包表单元素的包装,包括装,包括form,checkbox,radio,label,file,hidden,select,textfield,textarea,submit等,这里就不再赘述了。等,这里就不再赘述了。不过,不过,Struts2.0加了几个我们经常在工程中用到的控件如:加了几个我们经常在工程中用到的控件如:doubleselect、optiontransferselect等。非表等。非表单单UI局部常用的有局部常用的有actionerror,actionmessage,fielderror等等1doubleselect1描述描述提供两套提供两套HTML列表框列表框(select)元素。其中第二套元素显示的值会根据第一套元素被选中的值而改变。元素。其中第二套元素显示的值会根据第一套元素被选中的值而改变。2参数,如表参数,如表4-12所示所示(表过大,参考书中表表过大,参考书中表4-2)。3实例实例28 北京亚思晟北京亚思晟北京亚思晟北京亚思晟 科技有限公司科技有限公司科技有限公司科技有限公司4.2UI标签标签2optiontransferselect1描述描述创立一个可传递选项的列表框组件创立一个可传递选项的列表框组件,该组件是基于在两个该组件是基于在两个标签标签中间添加按钮,并允许中间添加按钮,并允许两个列表框之间的选项可以相互移动到对方的选择框中。在包含了表单提交动作根底上可以自两个列表框之间的选项可以相互移动到对方的选择框中。在包含了表单提交动作根底上可以自动选择所有的列表框选项动选择所有的列表框选项2参数,如表参数,如表4-13所示参考书中表所示参考书中表4-13。3实例实例实例实例129 北京亚思晟北京亚思晟北京亚思晟北京亚思晟 科技有限公司科技有限公司科技有限公司科技有限公司4.2UI标签标签实例实例230 北京亚思晟北京亚思晟北京亚思晟北京亚思晟 科技有限公司科技有限公司科技有限公司科技有限公司4.2UI标签标签3actionerror1描述描述根据特定布局风格提供由根据特定布局风格提供由action产生的错误产生的错误2参数,如表参数,如表4-14所示参考书中表所示参考书中表4-14。3实例实例.31 北京亚思晟北京亚思晟北京亚思晟北京亚思晟 科技有限公司科技有限公司科技有限公司科技有限公司4.2UI标签标签4Actionmessage1描述描述根据特定布局风格提供由根据特定布局风格提供由action产生的消息产生的消息2参数,如表参数,如表4-15所示参考书中表所示参考书中表4-15。3实例实例.32 北京亚思晟北京亚思晟北京亚思晟北京亚思晟 科技有限公司科技有限公司科技有限公司科技有限公司4.2UI标签标签5fielderror1描述描述根据特定布局风格提供由根据特定布局风格提供由field产生的错误产生的错误2参数,如表参数,如表4-16所示参考书中表所示参考书中表4-16。3实例实例field1field2.33 北京亚思晟北京亚思晟北京亚思晟北京亚思晟 科技有限公司科技有限公司科技有限公司科技有限公司4.2UI标签标签.实例实例1:显示所有字段错误显示所有字段错误实例实例2:只显示字段只显示字段1和和2的错误的错误34 北京亚思晟北京亚思晟北京亚思晟北京亚思晟 科技有限公司科技有限公司科技有限公司科技有限公司4.3STRUTS2中的表达式语言中的表达式语言4.3Struts2中的表达式语言中的表达式语言ExpressionLanguage,简称,简称EL在在View层层JSP页面开发中,我们还会经常使用表达式语言页面开发中,我们还会经常使用表达式语言ExpressionLanguage。表达式语言主要有以下几大好处:表达式语言主要有以下几大好处:防止防止、和和之类的语句,使页面更简洁;之类的语句,使页面更简洁;支持运算符如支持运算符如+-*/,比普通的标志具有更高的自由度和更强的功能;,比普通的标志具有更高的自由度和更强的功能;简单明了地表达代码逻辑,使用代码更可读与便于维护。简单明了地表达代码逻辑,使用代码更可读与便于维护。35 北京亚思晟北京亚思晟北京亚思晟北京亚思晟 科技有限公司科技有限公司科技有限公司科技有限公司4.3STRUTS2中的表达式语言中的表达式语言Struts2支持以下几种表达式语言:支持以下几种表达式语言:OGNLObject-GraphNavigationLanguage,可以方便地操作对象,可以方便地操作对象属性的开源表达式语言;属性的开源表达式语言;JSTLJSPStandardTagLibrary,JSP2.0集成的标准的表达式语言;集成的标准的表达式语言;Groovy,基于,基于Java平台的动态语言,它具有时下比较流行的动态语言平台的动态语言,它具有时下比较流行的动态语言如如Python、Ruby和和Smarttalk等的一些起特性;等的一些起特性;Velocity,严格来说不是表达式语言,它是一种基于,严格来说不是表达式语言,它是一种基于Java的模板匹配引擎,的模板匹配引擎,具说其性能要比具说其性能要比JSP好。好。我们重点介绍我们重点介绍OGNL。Struts2默认的表达式语言是默认的表达式语言是OGNL,OGNL是是Object-GraphNavigationLanguage的缩写,它是一种功能强大的表达式语言的缩写,它是一种功能强大的表达式语言ExpressionLanguage,简称为,简称为EL,通过它简单一致的表达式语法,可以存取对象,通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。它使用相同的表达式去存取对象的属性。关于化等功能。它使用相同的表达式去存取对象的属性。关于OGNL的详细信的详细信息,可以从参考相关文档。我们在这里只讲解息,可以从参考相关文档。我们在这里只讲解OGNL表达式语言的根本概表达式语言的根本概念。念。36 北京亚思晟北京亚思晟北京亚思晟北京亚思晟 科技有限公司科技有限公司科技有限公司科技有限公司4.3STRUTS2中的表达式语言中的表达式语言1常量常量如表如表4-17所示。所示。注意:string可以用单引号也可以用双引号。但是单个字母 如a与a是不同的,前者是char,后者是string。37 北京亚思晟北京亚思晟北京亚思晟北京亚思晟 科技有限公司科技有限公司科技有限公司科技有限公司4.3STRUTS2中的表达式语言中的表达式语言2操作符操作符如表如表4-18所示。所示。38 北京亚思晟北京亚思晟北京亚思晟北京亚思晟 科技有限公司科技有限公司科技有限公司科技有限公司4.3STRUTS2中的表达式语言中的表达式语言3)方法调用方法调用classTestintfun();调用方式:调用方式:t.fun()4)访问静态方法和变量访问静态方法和变量格式为格式为类全名包括包路径类全名包括包路径方法名方法名|值名值名,例如:,例如:some.pkg.SomeClassCONSTANTSsome.pkg.SomeClasssomeFun()39 北京亚思晟北京亚思晟北京亚思晟北京亚思晟 科技有限公司科技有限公司科技有限公司科技有限公司4.3STRUTS2中的表达式语言中的表达式语言5)访问访问OGNL上下文上下文OGNLcontext和和ActionContext;如表;如表4-19所示。所示。#符号相当于ActionContext.下表是ActionContext中几个有用的属性,如表4-20所示。40 北京亚思晟北京亚思晟北京亚思晟北京亚思晟 科技有限公司科技有限公司科技有限公司科技有限公司4.3STRUTS2中的表达式语言中的表达式语言6)集合操作集合操作(1)访问访问list&array,如表,如表4-21所示。所示。(2)访问Map如表4-22所示。动态创立map 例如#1:a,2:b#foo1:bar1,foo2:bar2。41 北京亚思晟北京亚思晟北京亚思晟北京亚思晟 科技有限公司科技有限公司科技有限公司科技有限公司4.3STRUTS2中的表达式语言中的表达式语言7)筛选筛选与与投影投影筛选筛选collection.?expr:#this代表当前循环到的代表当前循环到的object投影投影collection.expr如表如表4-23所示。所示。大家可以参考书中OGNL实例42 北京亚思晟北京亚思晟北京亚思晟北京亚思晟 科技有限公司科技有限公司科技有限公司科技有限公司4.3STRUTS2中的表达式语言中的表达式语言最后我们再补充最后我们再补充%和和$符号的用途符号的用途“%符号的用途是在标志的属性为字符串类型时,计算符号的用途是在标志的属性为字符串类型时,计算OGNL表达式的值。例如在表达式的值。例如在Ognl2.jsp中参加以下代码:中参加以下代码:%的用途的用途使用使用#,会原样打印,会原样打印#foobarfoo1,而使用,而使用%,会计算,会计算#foobarfoo1的值,例的值,例如得到如得到bar1“$有两个主要的用途有两个主要的用途用于在国际化资源文件中,引用用于在国际化资源文件中,引用OGNL表达式表达式在在Struts2配置文件中,引用配置文件中,引用OGNL表达式,例如:表达式,例如:ListPhotos.action?albumId=$albumId43 北京亚思晟北京亚思晟北京亚思晟北京亚思晟 科技有限公司科技有限公司科技有限公司科技有限公司4.4工程案例工程案例4.4工程案例工程案例学习目标学习目标本章节详细介绍了本章节详细介绍了Struts2的标签及的标签及OGNL表达式语言,并且配有详细的实表达式语言,并且配有详细的实例例案例描述案例描述本案例是管理员用户管理模块的用户展现功能,在前面登录案例根底上进行本案例是管理员用户管理模块的用户展现功能,在前面登录案例根底上进行改进,管理员登录成功后,进入管理员页面,点击用户管理链接,进入用户改进,管理员登录成功后,进入管理员页面,点击用户管理链接,进入用户管理管理Action,进行查询并保存,跳转到用户展现页面。,进行查询并保存,跳转到用户展现页面。案例要点案例要点在案例实现过程中使用在案例实现过程中使用struts2的标签实现登录的标签实现登录form表单,使用标签实现用表单,使用标签实现用户管理链接,并使用标签来迭代用户列表,其中要使用户管理链接,并使用标签来迭代用户列表,其中要使用OGNL来进行取数据来进行取数据的实现。的实现。
展开阅读全文