ImageVerifierCode 换一换
格式:PPTX , 页数:71 ,大小:558.64KB ,
文档编号:7669675      下载积分:15 文币
快捷下载
登录下载
邮箱/手机:
温馨提示:
系统将以此处填写的邮箱或者手机号生成账号和密码,方便再次下载。 如填写123,账号和密码都是123。
支付方式: 支付宝    微信支付   
验证码:   换一换

优惠套餐
 

温馨提示:若手机下载失败,请复制以下地址【https://www.163wenku.com/d-7669675.html】到电脑浏览器->登陆(账号密码均为手机号或邮箱;不要扫码登陆)->重新下载(不再收费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录  
下载须知

1: 试题类文档的标题没说有答案,则无答案;主观题也可能无答案。PPT的音视频可能无法播放。 请谨慎下单,一旦售出,概不退换。
2: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
3: 本文为用户(momomo)主动上传,所有收益归该用户。163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

1,本文(《基于新信息技术的Java-EE应用开发实训》课件第七章.pptx)为本站会员(momomo)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!

《基于新信息技术的Java-EE应用开发实训》课件第七章.pptx

1、第7章 Struts 2标签库7.1 Struts 2标签库简介7.2 OGNL7.3 通用标签7.4 用户界面标签第7章 Struts 2标签库7.1 Struts 2标签库简介第7章 Struts 2标签库Struts 2标签库是框架的一部分,是为了解决页面显示数据、封装简单页面逻辑而产生的类似HTML标记的组件。通过标签库,可以将复杂的Java脚本代码封装在组件中,开发者只需要使用简单的代码就可以实现复杂的Java脚本功能。实现了Java脚本的复用,提高了开发者的工作效率。要使用Struts 2标签,只需要在JSP页面添加如下定义:Struts 2框架的标签库可以分为以下两类:(1)通用

2、标签:主要用于数据访问,逻辑控制。非用户界面标签又包含以下两个小类:流程控制标签:主要包含用于实现分支、循环等流程控制的标签。数据访问标签:主要包含用于输出值栈(ValueStack)中的值、完成国际化等功能的标签。(2)用户界面标签(UI标签):主要用来生成HTML元素的标签。用户界面标签又包含以下两个小类:表单标签:主要用于生成HTML页面的FORM元素,以及普通表单元素的标签。非表单标签:主要用于生成页面上的tree和Tab页等。第7章 Struts 2标签库7.2 OGNL第7章 Struts 2标签库7.2.1 OGNL简介Struts 2标签库支持并默认使用OGNL表达式,从而不再

3、依赖任何表现层技术。所以学习标签库之前,必须学习OGNL。OGNL全称为Object-Graph Navigation Language,它是一个功能强大的表达式语言,用来获取和设置Java对象的属性,旨在提供一个更抽象的层次来对Java对象进行解析。OGNL表达式的基本单位是“导航链”,一般导航链由如下几个部分组成:(1)属性名称(Property names):例如对象user的属性username,可以通过user.username引用;(2)方法调用(Method Calls):例如hashCode()返回当前对象的哈希码;(3)数组元素(Array Indices):例如listen

4、ers0返回当前对象的listeners集合中的第一个成员。所有OGNL表达式都是基于当前对象的上下文来完成求值运算的,其中链的前面部分的结果将作为后面求值的上下文。第7章 Struts 2标签库7.2.2 OGNL三要素 访问OGNL的官方网站 http:/www.ognl.org查看相关API可以发现,OGNL的操作一般需要3个参数。其实OGNL的所有操作都是围绕这3个参数进行的,这3个参数被称为OGNL的三要素。1.表达式(Expression)表达式(Expression)是整个OGNL的核心,所有的OGNL操作都是针对表达式的解析后进行的。表达式会规定此次OGNL操作到底要做什么。因

5、此,表达式其实是一个带有语法含义的字符串,这个字符串将规定操作的类型和操作的内容。OGNL支持大量的表达式语法,不仅支持“链式”描述对象访问路径,还支持在表达式中进行简单的计算,甚至还能够支持复杂的Lambda表达式等。我们可以在接下来的章节中看到不同的OGNL表达式。第7章 Struts 2标签库2.Root对象(Root Object)OGNL的Root对象可以理解为OGNL的操作对象。当OGNL表达式规定了“做什么”以后,还需要指定对谁做。OGNL的Root对象实际上是一个Java对象,是所有OGNL操作的实际载体。这就意味着,如果我们有一个OGNL表达式,那么实际上我们需要针对Root

6、对象去进行OGNL表达式的计算并返回结果。3.上下文环境(Context)有了表达式和Root对象,就可以使用OGNL的基本功能了。事实上,在OGNL的内部,所有操作都会在一个特定的数据环境中运行,这个数据环境就是OGNL的上下文环境(Context)。说得再明白一些,就是这个上下文环境(Context)将规定OGNL的操作在哪里做。OGNL的上下文环境是一个Map结构,称为OgnlContext。之前提到的Root对象(Root Object),事实上也会被添加到上下文环境中去,并且将被作为一个特殊的变量进行处理。Struts 2对OGNL上下文的概念又做了进一步扩充,在Struts 2中,

7、OGNL在内存中如图7-1所示。第7章 Struts 2标签库Struts 2框架把OGNL Context设置为ActionContext。并且ValueStack作为OGNL的根对象的扩展。除valuestack之外,Struts 2框架还把代表application、session、request这些对象的Map对象也放到ActionContext中去了。第7章 Struts 2标签库7.2.3 ValueStack 对象ValueStack是Struts 2用以对OGNL计算进行扩展的特殊的数据结构,实际上是针对OGNL三要素中Root对象所进行的扩展。简单来讲ValueStack的扩

8、展方式可以分为两个主要步骤:其一,ValueStack从数据结构的角度被定义为一组对象的集合;其二,ValueStack规定在自身这个集合中的所有对象,在进行OGNL计算时,都被视为Root对象。ValueStack是一个被设计成“栈”的数据结构,并且还是具备表达式引擎计算能力的“栈”的数据结构。OGNL和ValueStack的数据结构的有机结合,共同构成了Struts 2中表达式引擎的使用基础。两者结合的意义在于:ValueStack成为了Struts 2框架进行OGNL操作的一个窗口。换句话来讲,扮演着数据流转催化剂角色的表达式引擎有了一个代理操作的接口,这个接口可以向外界有效的屏蔽所有底

9、层的实现细节,帮助我们将对OGNL原生态API的操作,转换为对特定数据结构(ValueStack)自身的操作。ValueStack是Struts 2框架的核心元素之一,是Struts 2框架进行OGNL计算的实际场所,是Struts 2框架进行数据访问的基础。第7章 Struts 2标签库通常提交一个请求,请求中都会带有相关参数数据。在Struts 2中如果对请求对象中的数据进行表达式语言的计算,先将该数据对象置于ValueStack中,通过对ValueStack进行操作即可。在后面讲解“OGNL在Struts 2框架中的作用”的章节中,会通过一个请求流程的例子,告诉大家OGNL的作用。同时从

10、该示例中,也可以看出ValueStack对象是一直存放着待处理的数据,在整个操作流程中。所以ValueStack是OGNL的计算场所,以及数据访问的基础。7.2.4 使用OGNL访问数据本节通过示例代码来讲述OGNL的使用(主要是OGNL表达式语言的相关知识)。新建的Java工程需要添加ognl.jar类库文件(本书使用ognl-2.6.11.jar文件)。创建一个简单的表示学生的Java Bean文件Student.java。class Student private String name;public String getName()第7章 Struts 2标签库 return name

11、;public void setName(String name)this.name=name;上面的Student类里面有一个name属性和相关的get和set方法。下面介绍使用OGNL获取Student的数据。public static void main(String args)/*创建一个Student对象*/Student student=new Student();student.setName(张三);try 第7章 Struts 2标签库 /*从Student对象中获取name属性的值*/Object value=Ognl.getValue(name,student);Syst

12、em.out.println(value);catch(OgnlException e)e.printStackTrace();上面代码中先实例化一个Student类并给name属性赋值,然后使用代码Ognl.getValue(name,student)获取name属性的数据,并打印出来。上面代码中getValue()方法的语法如下:public static Object getValue(String expression,Object root)throws OgnlException第7章 Struts 2标签库7.2.5 使用OGNL设置数据OGNL还支持赋值操作,以下是赋值操作的代

13、码:public static void main(String args)/*OGNL提供的一个上下文类,它实现了Map接口*/OgnlContext context=new OgnlContext();Student student=new Student();try /给root对象的属性赋值,相当于调用student.setName()Ognl.setValue(name,student,zhangsan);System.out.println(students name is:+student.getName();context.put(student,student);/给cont

14、ext中的对象属性赋值,相当于调用student.setName()第7章 Struts 2标签库7.2.5 使用OGNL设置数据OGNL还支持赋值操作,以下是赋值操作的代码:public static void main(String args)/*OGNL提供的一个上下文类,它实现了Map接口*/OgnlContext context=new OgnlContext();Student student=new Student();try /给root对象的属性赋值,相当于调用student.setName()Ognl.setValue(name,student,zhangsan);Syst

15、em.out.println(students name is:+student.getName();context.put(student,student);/给context中的对象属性赋值,相当于调用student.setName()第7章 Struts 2标签库 Ognl.setValue(#student.name,context,new Object(),lisi);System.out.println(students name is:+student.getName();/给context中的对象属性赋值,相当于调用student.setName()/在表达式中使用=赋值操作符

16、来赋值 Ognl.getValue(#student.name=wangwu,context,new Object();System.out.println(students name is:+student.getName();catch(OgnlException e)e.printStackTrace();第7章 Struts 2标签库运行结果如下:students name is:zhangsanstudents name is:lisistudents name is:wangwu上例中使用了三种方式对Student对象的name属性进行了赋值。其中最后的代码#student.nam

17、e=wangwu,使用“=”操作符赋值。OGNL表达式中能使用的操作符基本和Java里的操作符一样,除了能使用+、-、*、/、+、-、=等操作符以外,还可以使用mod、in、not in等操作。第7章 Struts 2标签库7.2.6 上下文环境以及方法调用之前讲过所有的OGNL表达式都是基于当前对象的上下文来获得相关数据的。下面看一段代码,学习OGNL在上下文中的运用。OGNL将Student对象作为根对象,根据表达式获取根对象中对应的name属性的数据。public static void main(String args)/*OGNL提供的一个上下文类,它实现了Map接口*/OgnlCo

18、ntext context=new OgnlContext();/实例化Student对象,并赋值 Student student1=new Student();student1.setName(zhangsan);Student student2=new Student();student2.setName(lisi);第7章 Struts 2标签库 /将实例化的Student对象放入context里面 context.put(student1,student1);context.put(student2,student2);/设置context的根对象 context.setRoot(st

19、udent1);try /*调用 成员方法*/获取上下文中根对象的name属性数据的长度 Object value=Ognl.getValue(name.length(),context,context.getRoot();System.out.println(student1 name length is:+value);/获取上下文中Student 2的name属性数据并将其转换成大写字母 Object upperCase=Ognl.getValue(#student2.name.toUpperCase(),context,context.getRoot();System.out.prin

20、tln(student2 name upperCase is:+upperCase);第7章 Struts 2标签库 /获取上下文中根对象的name属性数据中下标为5的字符 Object invokeWithArgs=Ognl.getValue(name.charAt(5),context,context.getRoot();System.out.println(student1 name.charAt(5)is:+invokeWithArgs);/获取上下文中Student对象的name属性数据并拼接起来显示 Object namesValue=(String)Ognl.getValue(#

21、student1.name+,+#student2.name,context,context.getRoot();System.out.println(namesValue);/*调用静态方法*/Object min=Ognl.getValue(java.lang.Mathmin(4,10),context,context.getRoot();System.out.println(min(4,10)is:+min);/*调用静态变量*/第7章 Struts 2标签库 Object e=Ognl.getValue(java.lang.MathE,context,context.getRoot()

22、;System.out.println(E is:+e);catch(OgnlException e)e.printStackTrace();代码运行结果如下:student1 name length is:8student2 name upperCase is:LISIstudent1 name.charAt(5)is:szhangsan,lisimin(4,10)is:4第7章 Struts 2标签库E is:2.718281828459045上面的示例代码演示了OGNL如何从上下文中获取对象以及对象的相关方法属性,还有如何使用静态方法。使用类静态的方法调用和值访问的表达式格式如下:类全名

23、(包括包路径)方法名|值名此外,若使用“#”符号则表示从context中取值,否则表示从根对象中取值。所以代码Ognl.getValue(name.length(),context,context.getRoot()是从根对象中取值,而代码Ognl.getValue(#student2.name.toUpperCase(),context,context.getRoot()则是从context上下文中取值。Action的实例总是放到valuestack中。而valuestack是根对象,所以对Action中的属性的访问就可以省略#标记。但是,要访问ActionContext中其他对象的属性,就

24、必须要带上#标记,以便让OGNL知道,不是从根对象,而是从其他对象中寻找。第7章 Struts 2标签库7.2.7 使用OGNL操作集合集合操作是每种语言中不可缺少的,本节学习如何使用OGNL操作集合。首先在Student.java中添加一个Map属性,以及相关的set和get方法。private Map scores=new HashMap();public Map getScores()return scores;public void setScores(Map scores)this.scores=scores;其次新建一个表示教室的类文件Classroom.java,类里面有list

25、相关的属性。第7章 Struts 2标签库class Classroom private List students=new ArrayList();public List getStudents()return students;public void setStudents(List students)this.students=students;此处学习操作集合的方法,示例代码如下:第7章 Struts 2标签库public static void main(String args)/*OGNL提供的一个上下文类*/OgnlContext context=new OgnlContext(

26、);/实例化Classroom类,并添加学生数据 Classroom classroom=new Classroom();classroom.getStudents().add(zhangsan);classroom.getStudents().add(lisi);classroom.getStudents().add(wangwu);/实例化Student类,并添加分数数据 Student student=new Student();student.getScores().put(Java,90);第7章 Struts 2标签库 student.getScores().put(C,80);s

27、tudent.getScores().put(Html,85);/将classroom和student放入上下文中 context.put(classroom,classroom);context.put(student,student);context.setRoot(classroom);try /*获得classroom的students集合*/Object collection=Ognl.getValue(students,context,context.getRoot();System.out.println(students collection is:+collection);第

28、7章 Struts 2标签库 /*获得classroom的students集合*/Object firstStudent=Ognl.getValue(students0,context,context.getRoot();System.out.println(first student is:+firstStudent);/*调用集合的方法*/Object size=Ognl.getValue(students.size(),context,context.getRoot();System.out.println(students collection size is:+size);/查看集合

29、数据 System.out.println(-);Object mapCollection=Ognl.getValue(#student.scores,context,context.getRoot();System.out.println(mapCollection is:+mapCollection);第7章 Struts 2标签库 Object firstElement=Ognl.getValue(#student.scoresJava,context,context.getRoot();System.out.println(the first element of scores is:

30、+firstElement);System.out.println(-);/*创建集合*/Object createCollection=Ognl.getValue(aa,bb,cc,dd,context,context.getRoot();System.out.println(createCollection);/*创建Map集合*/Object createMapCollection=Ognl.getValue(#key1:value1,key2:value2,context,context.getRoot();System.out.println(createMapCollection)

31、;第7章 Struts 2标签库 catch(OgnlException e)e.printStackTrace();运行结果如下:students collection is:zhangsan,lisi,wangwufirst student is:zhangsanstudents collection size is:3-mapCollection is:Html=85,C=80,Java=90the first element of scores is:90-aa,bb,cc,ddkey1=value1,key2=value2第7章 Struts 2标签库从示例代码可以看出使用OGNL操

32、作集合也是很简单的事情,基本上和前面章节讲的获取、设置数据一样。并且创建集合也很简单:Object createCollection=Ognl.getValue(aa,bb,cc,dd,context,context.getRoot();Object createMapCollection=Ognl.getValue(#key1:value1,key2:value2,context,context.getRoot();仔细查看上面创建集合的两行代码,会发现第二行代码的表达式中多了一个“#”符号。“#”在OGNL中用于构建Map对象。当然“#”在OGNL中还有其他意义,并且OGNL还有很多其他类

33、似符号,在后面章节中详细讲解。#key1:value1,key2:value2上面是创建Map的代码,使用#,中间使用逗号隔开键值对,并使用冒号隔开key和 value。创建list直接使用,中间使用逗号隔开元素。aa,bb,cc,dd第7章 Struts 2标签库7.2.8 使用OGNL过滤集合与投影集合实际工作中经常会对集合进行筛选过滤,本节以一段示例代码来讲述使用OGNL对集合进行筛选过滤的方法。(1)修改类文件Classroom.java,添加一个集合属性Student。private List studentList=new ArrayList();public List getSt

34、udentList()return studentList;public void setStudentList(List studentList)this.studentList=studentList;(2)修改类文件Student.java,添加以下属性和一个带参数的构造函数,重写toString()方法。第7章 Struts 2标签库class Student private String name;private int age;public Student()public Student(String name,int age)super();this.name=name;this

35、.age=age;第7章 Struts 2标签库 public String getName()return name;public void setName(String name)this.name=name;public int getAge()return age;public void setAge(int age)第7章 Struts 2标签库 this.age=age;Override public String toString()return Student name=+name+;(3)编写示例代码,学习过滤集合和投影集合的方法。public static void mai

36、n(String args)/*OGNL提供的一个上下文类*/OgnlContext context=new OgnlContext();/*实例化Classroom对象,并添加一些Student*/第7章 Struts 2标签库 Classroom classroom=new Classroom();classroom.getStudentList().add(new Student(zhangsan,1);classroom.getStudentList().add(new Student(lisi,1);classroom.getStudentList().add(new Student

37、(wangwu,0);/*将Classroom放入上下文中*/context.put(classroom,classroom);context.setRoot(classroom);try /*OGNL投影集合的语法为:collection.expression*/Object projectionCollection=Ognl.getValue(studentList.name,context,context.getRoot();System.out.println(projectionCollection is:+projectionCollection);System.out.print

38、ln(-);第7章 Struts 2标签库 /*OGNL过滤集合的语法为:collection.?expression*/Object filterCollection=Ognl.getValue(studentList.?#this.name.length()5,context,context.getRoot();System.out.println(filterCollection is:+filterCollection);catch(OgnlException e)e.printStackTrace();(4)运行后输出结果:projectionCollection is:zhangs

39、an,lisi,wangwu-filterCollection is:Student name=zhangsan,Student name=wangwu示例运行结果的第一行是OGNL对集合进行投影操作产生的。投影的语法为:第7章 Struts 2标签库collection.expression如果把集合看成一张数据表,投影操作就好像获取表中某个字段列的数据。而过滤操作就是通过条件查询表中符合条件的数据行。过滤操作的语法为collection.选择操作符 expression选择操作符有以下3种:“?”获取所有匹配的对象。“”获取符合条件的第一个对象。“$”获取合条件的最后一个对象。在上面示例中

40、过滤集合时,表达式使用了#this,表示当前集合对象。前面讲过OGNL表达式是一个链式操作,从左到右,表达式每一次运算返回的结果都成为临时的“当前对象”,并在此临时对象之上继续进行运算,直到运算结束。而这个临时的“当前对象”会被存储在一个叫作this的变量中,这个this变量称为this指针。在OGNL表达式中,this指针指向了“当前对象”,使用this指针时需要在this前面加上“#”。第7章 Struts 2标签库以下为“#”符号的3种用法:(1)加在普通的OGNL表达式前面,用于访问OGNL的上下文中的变量。(2)使用#语法动态创建Map。(3)加在this指针前面来使用this指针。

41、7.2.9 OGNL在Struts 2框架中的作用对于开发者而言,OGNL在Struts 2框架中有两种作用:(1)表达式语言:作为Struts 2框架默认的表达式语言。通常在表单输入和JSP标签中使用,通过OGNL表达式在视图层中绑定Java端数据。(2)类型转换:负责数据类型的转换。数据类型转换自动化是Struts 2最强大的功能之一,Struts 2框架就是通过OGNL实现将数据转换成为复杂的Java类型。还可以通过自定义类型转换器来扩展转换功能,这样就可以实现转换任何数据类型包括自定义类型。在Struts 2框架中,当使用基于字符流的HTTP输入和输出时,Java内部处理程序通过OGN

42、L作为接口实现数据交互。第7章 Struts 2标签库上面提到绑定数据和数据类型转换,为什么要转换数据类型?这个就和Struts 2 框架的MVC模式有关了。在View层,页面上所有数据都是不带数据类型的字符串,无论数据结构有多复杂、丰富,到了展示的时候,全部都当作字符串在页面展现出来。数据传递时,任何数据都被当作字符串或字符串的数组来进行。而在Controler层,数据模型遵循Java的语法和数据结构。所有的数据载体在Java中表现为符合Java语法的数据结构和数据类型。数据在传递时,以对象的形式进行。Controller要和View交互,就会出现“字符串”与“Java对象”之间的不匹配。这

43、个不匹配源于View层是一个“弱类型”的平台,View层的目标就是展示内容。而Controller层的Java代码需要处理数据、分析业务,需要有表示复杂逻辑的对象类型,因此Java必须是具有丰富数据类型的“强类型”平台。当同一个数据在“弱类型”的平台和“强类型”的平台之间交互时,必须有一个“翻译”的角色来解决这种“不匹配”的问题。这个“翻译”就是OGNL,它起着桥梁作用,以便数据能够在MVC层次间顺利地交互流转。下面从架构的视角理解OGNL在框架中的作用。图7-2展示了数据在框架中输入和输出流程。图中所有的数据在InputForm.html页面中接受输入,并提交请求,进入请求处理流程。所有的处

44、理结束后,在ResultPage.html第7章 Struts 2标签库页面输出结果,响应用户请求。现在让我们跟随着框架中输入输出的数据,来看看它们在不同区域移动时OGNL是如何实现数据绑定和数据类型转换的。第7章 Struts 2标签库1.数据输入时数据是从图7-2中的InputForm.html页面输入的。在InputForm.htm页面中,有一个Form表单,表单中包含2个文本输入字段。伪代码标签中的字符串是字段的name属性,另外,要注意的是属性名称一定要是合法的OGNL表达式。当输入页面准备好后,我们需要用户为这两个字段输入数据,并将表单提交给框架。当提交的数据表单作为一个页面请求进

45、入框架后,它呈现为Java语言中的HttpServletRequest对象。图7-2中,request对象参数中有2个名/值对,其中“名”是表单文本字段的名字,“值”是表单被提交时用户输入的值,这个时候所有的输入内容都是字符串。框架获得了请求,接下来就要处理request参数中的数据。那么,“待处理的数据在哪儿?”待处理数据在ValueStack中,也就是在OGNL上下文中的Root对象里可以找到待操作的数据。在通过OGNL表达式定位目标属性,找到相关数据后,得到的数据依然是字符串类型。这个时候类型转化器就起到作用了。我们需要把字符串age属性转换成Java的int类型。OGNL会查找它可用的

46、类型转化器的集合,并处理特定的类型转换。Struts 2框架提供一系列类型转换器来处理Web应用程序领域所有常规的类型转换。字符串和int类型之间的类型转换有内建的类型转换器提供。数值转换成对应类型后并设置到User对象上。第7章 Struts 2标签库2.数据输出时实际上,数据输出就是数据输入的“逆序”。在请求流程中调用业务处理完数据之后,最总会得到某种结果并向用户呈现一个新的应用程序视图。重要的是,在处理请求的过程中,数据对象会保留在ValueStack中。当结果视图开始呈现时,会通过页面标签中OGNL表达式访问ValueStack,从而从ValueStack中取得对应的数据。在图7-2

47、ResultPage.jsp 中,用户的年龄使用Struts 2 property属性标签获取,标签使用一个OGNL表达式获取应该呈现的值。但是我们必须再一次转换数据类型,这一次我们从ValueStack中将Java类型转化为可以写入HTML页面的字符串类型。在上述情况下,将int类型再次转换成字符串,并在ResultPage.jsp页面中呈现给用户。7.2.10 在Struts 2项目中使用OGNL通常在Struts 2项目中,OGNL要结合标签一起使用。在使用OGNL表达式时,需要在web.xml文件中添加ActionContextCleanUp过滤器,它的作用是清理上下文缓存。strut

48、s-cleanup 第7章 Struts 2标签库 org.apache.struts2.dispatcher.ActionContextCleanUp struts-cleanup /*Struts 2的标签库都是使用OGNL表达式来访问ActionContext中的对象数据的,如:上面代码“#keyName”,使用“#”符号取出堆栈上下文中的存放的对象。表7-1所示为引用属性列表。第7章 Struts 2标签库上表中的示例代码,列举了如何使用“#”从request、session以及application对象中获取userName属性数据。在页面中代码示例如下:request.userna

49、me=session.username=application.username=attr.username=运行结果如下:request.username=张三session.username=李四第7章 Struts 2标签库application.username=王五attr.username=张三假设要使用“#”获取Paraments对象的username属性值,代码如下:OGNL在标签中的操作与之前所学相同,例如:其中,“java.lang.Mathfloor(44.56)”就遵循了静态方法调用的语法。其他操作也一样,如之前学过的过滤操作的代码示例片段为:Ognl.getValue

50、(studentList.?#this.name.length()5,context,context.getRoot();在标签中也是同样的使用:5/另外,在标签中经常会用到“%”和“$。“%”符号的用途是在标志的属性为字符串类型时,计算中的OGNL表达式的值。示例代码如下:第7章 Struts 2标签库 通过“%”可以字符串里面使用表达式,运行结果如下:tags.jsp?userName=%23request.userNametags.jsp?userName=zhangsan“$”符号主要用在Struts 2框架的资源文件(如国际化资源文件)或配置文件中引用OGNL表达式,例如:10 10

侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|