标记?对于表单标签而言,name和value属性之间存在一个特殊的关系:
–因为每个表单元素会被映射成Action属性,所以如果某个表单对应的Action已经被实例化(表单被提交)、且属性有值时,则该Action对应表单里的元素会显示出该属性的值,这个值作为表单标签的value
值
–name属性设置表单元素的名字,表单元素的名字实际上封装着一个请求参数,而请求参数是被封装到Action属性的
–所以在使用Struts2的标签库时,无须指定value属性,Struts2标签会自动处理
select标签
select标签用于生成一个下拉列表框,使用该标签必须指定list属性,系统会使用list属性指定的集合来生成下拉列表框的选项
?属性
?list:要迭代的集合,使用集合中的元素来设置各个选项,如果list的属性为Map则Map的key成为选项的value,Map的value会成为选项的内容
?listKey:指定集合对象中的哪个属性作为选项的value
?listValue:指定集合对象中的哪个属性作为选项的内容
?headerKey:设置当用户选择了header选项时提交的value,如果使用该属性,不能为该属性设置空值?headerValue:显示在页面中header选项内容
?emptyOption:是否在header选项后面添加一个空选项
?multiple:是否多选
?size:显示的选项个数
optgroup标签
optgroup标签用于生成一个下拉列表框的选项组
?该标签必须放在中使用
?一个下拉列表可以包含多个选项组
?使用optgroup标签时,一样需要指定list、listKey和listValue等属性
?optgroup标签可以指定label属性,而该label属性时选项组的组名
?浏览者无法选中选项组的label
updownselect标签
类似select标签,区别是该标签生成的列表可以上下移动选项。另外与select相同都要指定list、listkey和listvalue等属性
?其他属性:
–allowMoveUp:是否显示“上移”按钮,默认为true
–allowMoveDown:是否显示“下移”按钮,默认为true
–allowSelectAll:是否显示“全选”按钮,默认为true
–moveUpLabel:设置“上移”按钮文本,默认是“^”
–moveDownLabel:设置“下移”按钮文本,默认是“v”
–selectAllLabel:设置“全选”按钮文本,默认是“*”
doubleselect标签
级联列表,当选择第一个列表时,第二个列表框的内容会随之改变
?属性:
因为两个都是下拉列表,因此需要指定两个下拉列表框的选项
–list:指定输出第一个下拉列表框中选项集合
–listKey:第一个下拉列表框的值
–listValue:第一个下拉列表框的标签
–doubleList:指定输出第二个下拉列表框中选项集合
–doubleListKey:第二个下拉列表框的值
–doubleListValue:第二个下拉列表框的标签
–doubleName:第二个下拉列表框的name属性
?注意:
1.使用doubleselect标签时,必须放在标签中使用
2.默认情况下,第一个下拉列表框只支持两项,如果要包含更多的值list和doubleList就不能直接设定;可以采用一种迂回方式来实现,首先定义一个Map对象,该Map对象的value都是集合,这样就能以Map对象的多个key创建第一个下拉列表框的列表项,而每个key对应的集合则用于创建第二个下来列表框的列表项
keySet:将map集合中所有的键存入到Set集合,因为Set具备迭代器。
所有可用迭代方式取出所有的键,再根据get方法,获取每一个键对应的值。
optiontransferselect标签
联动列表,optiontransferselect会生成两个列表选择框,并生成系列的按钮用于控制各选项在两个下拉列表之间的移动、升降等;当提交表单时,两个列表框对应的请求参数都会提交
?属性:
–addAllToLeftLabel:设置全部移动到左边按钮的文本
–addAllToRightLabel:设置全部移动到右边按钮的文本
–addToLeftLabel:设置左移动按钮的文本
–addToRightLabel:设置右移动按钮的文本
–allowAddAllToLeft:设置是否出现全部移动到左边的按钮
–allowAddAllToRight:设置是否出现全部移动到右边的按钮
–allowAddToLeft:设置是否出现全部移动到左边的按钮
–allowAddToRight:设置是否出现全部移动到右边的按钮
–leftTitle:设置左边列表的标题
–rightTitle:设置右边列表的标题
–allowSelectAll:设置全选按钮
–list:第一个下拉选择框的集合
–listKey:第一个下拉选择框的value属性
–listValue:第一个下拉选择框的label属性
–name:设置第一个下拉选择框的name属性
–value:设置第一个下拉选择框的value属性
–multiple:设置第一个下拉选择框是否允许多选
–doubleList:第二个下拉选择框的集合,必选属性
–doubleListKey:第二个下拉选择框的value属性
–doubleListValue:第二个下拉选择框的label属性
–doubleName:设置第二个下拉选择框的name属性,必选
–doubleValue:设置第二个下拉选择框的value属性,必选
–doubleMultiple:设置第二个下拉选择框是否允许多选
radio、checkbox、checkboxlist标签
?checkbox的属性:
?id和name:指的是该标签的标识id和标识名。
?value:指是否选中,其值只能为True或False,相当于传统checkbox中的checked。?fieldValue:相当于传统checkbox中的value值。
?label:对于该checkbox显示在页面上方框后面的描述。
hidden标签
hidden标签输出一个HTML隐藏表单元素,等价于HTML代码:
submit标签
submit标签输出一个提交按钮。submit标签和form标签一起使用可以提供异步表单提交功能。
?submit标签可以输出以下三种类型的提交按钮。
?input:等价于HTML代码
?image:等价于HTML代码
?button:等价于HTML代码
名称必需默认类型描述
type 否input String 要使用的提交按钮的类型,有效值:input button image
src 否无String 为image类型的提交按钮设置图片地址。该属性对input和button类
型的提交按钮无效
action 否无String 指定处理提交请求的action
method 否无String 指定处理提交请求的action的方法
?struts2提供的一种特性,即使用一些预定义的前缀来命名一个按钮,通过按钮的名字来改变执
行的行为。Struts2定义了4个前缀,如下:
?method:使用method前缀,来取代action默认的execute()方法的执行
?action:使用action前缀,取代form标签指定的action,将请求导向到另外的action进行处理。
?redirect:使用redirect前缀将请求重定向到其他的URL,甚至可以是Web应用程序外部的URL。
?redirection-action:使用redirect-action前缀将请求重定向到其他的action。在内部,struts2使用ServletRedirectResult来执行这个任务。
使用formaction属性可以实现取代form标签指定的action
reset标签
reset标签输出一个重置按钮。
如果是类型为input的重置按钮,则只能通过value属性来设置重置按钮上的文本。
label标签
Xhtml主题下的label标签输出两个HTML的label标签(simple主题下的label标签只输出一个HTML label标签),分别位于一行的两列,左边的label标签起提示作用,右列的label标签用于显示只读的action属性数据。
token标签
防止重复提交表单;如果需要该标签起作用,则应该在Struts2的配置启动TokenInterceptor拦截器或TokenSessionStoreInterceptor拦截器
?原理:在表单中增加一个隐藏域,每次加载该页面时,该隐藏域的值都不相同。而
TokenInterceptor拦截器则拦截所有用户请求,如果两次请求时该token对应的隐藏域的值相同(前一次提交时token隐藏域的值保存在session里),则阻止表单提交
5. 非表单标签【NoFormTagLib】
component标签
使用component标签可以自定义组件,当需要多次使用某些代码段是,就可以自定义一个组件在页面中使用component标签多次调用。
?该标签的主要属性有:
?theme属性:该属性用来指定自定义组件所使用的主题,默认值为xhtml。
?templateDir属性:该属性用来指定自定义组件使用的主题目录,默认值为template。
?template属性:该属性用来指定自定义组件所使用的模板文件,自定义模板文件可以采用JSP、FreeMarker 和Velocity这3中技术编写代码。
actionerror 、actionmessage、fielderror标签
actionerror和actionmessage用法一样,都是负责输出Action对象封装的信息;
区别:
actionerror标签负责输出Action对象的getActionError()方法的返回值,而actionmessage负责输出Action对象的getActionMessages()方法的返回值
第五章
Struts2高级应用
1.Struts2 类型转换
所有页面与控制器传递的数据均为String类型,而我们在对其进行处理时可能会
用到各种数据类型,程序无法自动完成数据类型的转换,需要我们在代码中手动完成,这个过程称为类型转换。String Object
Struts2能自动处理类型转换过程中出现的未知异常.
Struts2框架提供了下列数据类型与String类型相互转换的功能:
?boolean/Boolean、char/Character、int/Integer、float/Float、double/Double
?Date:使用当前区域(Local)的Short格式转换
?数组:将同名多值参数转换成特定类型的数组;在默认情况下,数组元素是字符串,如果用户
提供了自定义类型转换器,也可以是其他符合类型数组;对于数组的类型转换将按照数组元素的类型来单独转换每一个元素,如果数组元素的类型转换本身无法完成,系统将出现类型转换错误
?集合(Collection)类型:将同名多值参数转换成集合类型
基于OGNL的类型转换
借助OGNL表达式的支持,Struts2允许以另一种简单方式将请求参数转换成引用类型
?注意:
1.因为struts2将通过反射来创建一个引用对象,因此系统必须为该类提供无参构造
2.Action中必须提供get和set方法
?如果要访问Action的Map类型属性,那么表单域的属性设置为“Action属性名['key值'].
属性名”的形式,其中“Action属性名”是Action类里包含的Map类型属性,后一个属性名则是Map对象里引用类型对象的属性名【OgnlObjectMap】
指定集合元素的类型【noGenericList】【noGenericMap】
Struts2允许开发者通过局部类型转换文件来指定集合元素的类型
?类型转换文件就是一个普通的Properties文件
?命名规则:ActionName-conversion.properties形式,其中ActionName是需要Action的
类名,后面的-conversion.properties字符串则是固定部分
?类型转换文件放在和Action类文件相同的位置
对于List集合的转换:
为了指定List集合里元素的数据类型,需要指定两个部分:
–List集合属性的名称
–List集合里元素的类型
通过在局部类型转换文件中指定如下key-value即可:
Element_=
–ListPropName:List集合属性的名称
–ElementType:集合元素类型
对于Map集合的转换:
需要同时指定Map的key类型和value类型
–key的类型转换
在局部类型转换文件中增加:Key_=
–value的类型转换
在局部类型转换文件中增加:Element_=
自定义类型转换器
Struts2默认的转换器并不总是满足需求。例如,输入时间,Struts2只能转换形如12:00:00的格式,而输入12:00就会抛出错误。因此需要自定义数据转换器
Struts2的类型转换器依然基于ONGL框架的,在OGNL中有一个TypeConverter接口,这个接口是自定义类型转换器必须实现的接口
public interface TypeConverter{
public Object convertValue(Map context,Object targe,Member member,String propertyName,Object value,Class toType);
}
但这个接口里的方法太复杂,所以OGNL还为该接口提供了一个实现类:DefaultTypeConverter,通常都采用扩展该类来实现自定义类型转换器。实现时需要重写convertValue()方法
?Struts 2框架提供了转换器类定义的方法,一般有两种方法来定义转换器类。
(1)继承DefaultTypeConverter类来定义转换器类。【CustomConvert】
继承DefaultTypeConvertor类来定义转换器类通常须重写其中的convertValue()方法。public Object convertValue(Map context,Object target,Class toType)
–context是表示OGNL上下文的Map对象
–target是需要转换的对象
–toType是要转换的目标类型。
convertValue方法的作用非常简单,负责完成类型的转换,但是这种转换是双向的:字符串转换为对象或对象转换为字符串
为了实现双向转换,程序通过判断toType判断转换的方向,toType为引用类型时表明要将字符串转换成引用类型;当toType为String类型时表明需要对象转换成字符串类型
(2)继承StrutsTypeConverter类来定义转换器类。【StrutsTypeConverter】
?为了简化类型转换器的实现,Struts2提供了一个StrutsTypeConverter抽象类,这个抽象类
是DefaultTypeConverter类的子类。
?StrutsTypeConverter类简化了类型转换器的实现,已经实现了DefaultTypeConverter的
convertValue()方法,实现该方法时,将两个不同转换方向替换成不同方法,当把字符串转换为复合类型时,调用convertFromString()抽象方法;当需要把复合类型转换成字符串时,调用convertToString()抽象方法
?继承StrutsTypeConverter类通常需要重写两个方法:convertFromString()和
convertToString()。
public Object convertFromString(Map context,String[] values,Class toClass)
功能:将字符串转换为一个对象,该方法由拦截器调用,返回目标类的对象
Map context:代表Action组件的环境,通过它可访问值栈、引用session、application等元素
String[] values:代表客户端提交的请求参数
Class toClass:代表要转换的目标类
public String convertToString(Map context,Object obj)
功能:将对象转换成一个字符串,该方法由拦截器调用
Object obj:要转换的对象
注册类型转换器
仅仅为该应用提供类型转换器还不够,因为Struts2依然不知道何时使用这些类型转换器,所以必须将类型转换器注册在Web应用中,Struts2框架才可以正常使用该类型转换器
Struts2支持三种注册类型转换器方式:
–注册局部类型转换器:仅仅对某个Action的属性起作用
–注册全局类型转换器:对所有Action的特定类型的属性生效
–注解方式注册类型转换器
?基于应用的全局配置【GlobalConverter】
全局类型转换器不是对指定Action的指定属性起作用,而是对指定类型起作用
所有Action组件都可以使用
1.在CLASSPATH的根路径下(通常是WEB-INF/classes目录)创建一个名为
xwork-conversion.properties的文件
2.提供一个属性定义,属性名是要转换的类的名称,属性值是类型转换器的类名称。
例如,为所有的java.util.Date对象提供一个DateTypeConverter转换器,你需要在xwork-conversion.properties文件中添加下列内容:
Java.util.Date=com.ibm.converter.DateTypeConverter
?基于Action的局部配置【ActionConverter】
仅对指定的Action起作用
1.方法是在Action类所在的包中创建ClassName-conversion.properties文件
2.提供一个属性定义,左边是要转换的类的属性名,右边是类型转换器的类名称。例如:要为User类指
定一个类型转换器,你需要在该类所在的包中创建User-conversion.properties文件,并添加下列内容:birthday=com.ibm.converter.DateTypeConverter
注意:局部类型转换器对指定Action的指定属性起作用,一个属性只调用convertValue()方法一次;全局类型转换器对所有Action的特定类型起作用,因此可能对一个属性多次调用convertValue()方法;例如:属性是一个数组或集合,数组或集合中包含几个该类型的元素,就会调用convertValue()方法几次
处理类型转换异常【errorHandler】【errorHandler2】
?当发生了类型转换错误后,struts2会将转换错误放到ActionContext中一个名为
conversionErrors的Map对象中。在出现类型转换错误后,你可以选择是否向用户提示转换错误。
?在struts2中有两个拦截器负责类型转换错误,如下所示:
com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor: conversionErrorInterceptor把在ActionContext的conversionErrors Map中找到的所有错误都添加为action的字段错误(Action需要实现ValidationAware接口,ActionSupport基类实现了该接口),此外,它还把有转换错误的字段的原始值保存下来,这样之后对这个值的请求得到的就是原始值而不是action中的值。
org.apache.struts2.interceptor.StrutsConversionErrorInterceptor
StrutsConversionErrorInterceptor继承自ConversionErrorInterceptor类,但是它只在字段值不是null、不是“”或者不是{“”}(表示只有一个空字符串元素的字符串数组)的情况下,把转换错误从
ActionContext添加到action的字段错误。这在Web环境下是有用的。
?当发生了转换错误后,struts2会将请求导向到”input”结果代码映射的视图,因此要向用
户提示转换错误信息,你还需要在Action的配置中添加input结果映射。
?总结一下:要向用户报告类型错误,需要实现下面三个步骤:
1、引用defaultStack拦截器栈(包含了conversionError拦截器)
2、让Action类从ActionSupport继承(实现了ValidationAware接口)
3、为Action配置添加input结果映射
2.Struts2 数据校验
数据校验概述
?客户端校验
通过JavaScript编写客户端表单验证代码,在提交给服务器前首先执行这些验证代码,如果用户输入的数据未通过验证,则不能提交给服务器端进行处理。
?服务器端校验
–将数据提交给服务器端应用程序,在做业务逻辑处理之前对数据进行校验,如果数据未通过校验,则不能继续进行业务处理,而是转到客户端要求重新输入
–服务器端校验的实现方式主要有两种:通过Action中的validate方法实现和使用XWork校验框架实现。
手动编程方式
?方式一:重写validate()方法,在struts2框架中,专门用来校验数据的方法是validate()方
法。开发者可以通过继承ActionSupport类,并重写validate()方法来完成输入校验。
【overrideValidate】
SCME_STRUTS2试卷
--------------------------------------装--------------------------------------订------------------------------线---------------------------------------- **学院课程考试试卷 课程名称:《使用Struts2开发基于MVC设计模式的企业级应用》(A)卷 年级:班级: 姓名:_______________ 学号:_________________ 考试(考查) 闭卷 选择题(每题2分,共计100分) 1.在控制器类中一般需要添加相应属性的( A )和(C )。(选两项) A.setter方法 B.as方法 C.getter方法 D.is方法 2.业务控制器需要在( B )配置文件中进行配置 A.web.xml B.struts.xml C.struts2.xml D.webwork.xml 3.不属于Struts 2表单标签库的是( D )。 A. B. C. D.
Struts2学习之二--Struts2标签介绍
Struts2学习之二--Struts2标签介绍 热12已有 14625 次阅读 2009-07-12 18:53 [顶]3G移动--Android开发工程师全能班 (转) Struts2学习之二--Struts2标签介绍 在上一篇文章《为Struts 2.0做好准备》中,我过于详细地介绍了Struts 2.0开发环境和运行环境的配置,所以,本文很少涉及的以上两方面的细节。如果,您看完《为Struts 2.0做好准备》后,还有什么不明白,或者没法运行文中例子,请联系我。我的E-MAIL:Max.M.Yuan@https://www.wendangku.net/doc/9e12352100.html,。 在介绍常用标志前,我想先从总体上,对Struts 1.x与Struts 2.0的标志库(Tag Library)作比较。 分类将标志库按功能 分成HTML、Tiles、 Logic和Bean等 几部分 严格上来说,没有分类,所有标志都在URI 为“/struts-tags”命名空间下,不过, 我们可以从功能上将其分为两大类:非UI 标志和UI标志 表达式语言(expression languages)不支持嵌入语言 (EL) OGNL、JSTL、Groovy和Velcity 以上表格,纯属个人总结,如有所不足或错误,请不吝指正 好了,我要开始介绍“常用”(这里所谓的“常用”,是指在已往工作中使用Struts里经常用到的)的标志了。 1.非UI标志 o if、elseif和else 描述: 执行基本的条件流转。
参数: 名称必 需 默 认 类型描述备注 test 是Boolean 决定标志里内容是否 显示的表达式 else标志 没有这个 参数 id 否Object/String 用来标识元素的id。在UI和表单中为HTML的id属性 例子: <%@ page contentType="text/html; charset=UTF-8" %> <%@ taglib prefix="s" uri="/struts-tags" %>
Condition Flow Condition Flow
" /> Max's file here Scott's file here struts2标签使用实例
Struts2中数据标签使用示例 S truts2提供了大量丰富的标签供使用,它不再像S truts1中一样,将种类标签进行分门列别,但可以根据其使用的用途用以区别。本文通过对S truts2中数据标签的学习,来对S truts2中标签的学习起到一个抛砖引玉的作用。 文中将介绍Action标签、Bean标签、Data标签、Include标签、P aram标签、Set标签、T ext标签、P roperty 标签等标签。 代码下载:https://www.wendangku.net/doc/9e12352100.html,/y1ps2Mjpc3NiLKuetMOpCsZOOypD6KSdo8-46Zy2wpoMcABeo4vOC NJXtWDEO93-TXgZogwAF YxSOni5BEG2EoN65OFwHdG71v-/St ruts2DataTags.rar?download 一、标签 Action标签,顾名思义,是用来调用Action的标签,在JSP中页面中,可以指向具体指定某一命名空间中的某一Action。而标签的主体用于显示及渲染Actionr的处理结果。 1.WebRoot\pages\dataTagssuccess.jsp处理页面 <%@ page contentType="text/htm l; charset=GBK" %> <%@ taglib prefix="s" uri="/struts-tags" %> Action Tag 示例
Action Tag 示例
s:action标签用于在页面显示结果. 这里使用标签进行页面跳转,并用于显示处理的结果。 2.先来看st ruts.xml中的配置: /pages/dataTags/success.jsp Strus2标签库
Strus2标签库 Struts2提供了一套标签库用于简化JSP层的编程,开发者只需要标签中做少量的设置,就可以实现各种常用的效果。Struts2的标签与Action联系比较紧密,使用标签后,Struts会自动完成JSP层的显示数据、在Action层采集数据等工作。 Struts2的标签都统一包含在struts-tags.tld文件中(位于struts2-core-2.2.1.jar中),使用统一前缀。 Struts标签库大致分为: UI标签:包括表单标签,非表单标签 非UI标签:流程控制标签,数据访问标签 首先要在JSP中使用taglib编译指令导入标签库,然后才可以使用标签。 <%@taglib prefix="s" uri="/struts-tags"%> 以上代码用于导入Struts2标签库,其中URI就是对应web.xml文件中指定的标签库的URI,而prefix属性值是该标签库的前缀。 第1节OGNL语言 OGNL是Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言(Expression Language,简称为EL),通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。它使用相同的表达式去存取对象的属性。 OGNL语法类似于EL,主要使用.作为操作符,例如要访问person.getCountry().getName()可以这样写:https://www.wendangku.net/doc/9e12352100.html,。 1.1 OGNL的常用符号 主要是#号,其作用有三种: 1. 访问OGNL上下文与ActionContext资源,相当于ActionContext.getContext(), 常用#属性如下表: parameters: 相当于:request.getParameter("userName");
史上最全的struts2标签
a a标签创建一个HTML超链接,等价于HTML 的登陆 更多 a 信息 action 使用action标签可以允许在JSP页面中直接调用Action。 范例如下: 更多 action 信息 actionerror 这个标签负责输出错误信息到客户端。 示范代码: Action代码如下: public String execute() { addActionError("第一条错误消息!"); addActionError("第二条错误消息!"); return SUCCESS; }.... JSP中: 更多 actionerror 信息 actionmessage
这个标签负责输出提示信息到客户端,例子如下: Action代码如下: public String execute() { addActionMessage("第一条普通消息!"); addActionMessage("第二条普通消息!"); return SUCCESS; } JSP: 更多 actionmessage 信息 append 用来做iterator标签的辅助,将不同iterator中的内容合在一个iterator中。例子: 更多 append 信息 bean bean标签用于创建一个JavaBean的实例。 示范样例: 更多 bean 信息
struts2标签和OGNL表达式
1.OGNL表达式语言 OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,它是一个开源项目。 Struts 2框架使用OGNL作为默认的表达式语言。 相对EL表达式,它提供了平时我们需要的一些功能,如: 支持对象方法调用,如xxx.sayHello(); 支持类静态方法调用和值访问,表达式的格式为@[类全名(包括包路径)]@[方法名 | 值名],例如:@https://www.wendangku.net/doc/9e12352100.html,ng.String@format('foo %s', 'bar')或 @cn.itcast.Constant@APP_NAME; 操作集合对象。 Ognl 有一个上下文(Context)概念,说白了上下文就是一个MAP结构,它实现了java.utils.Map接口,在Struts2中上下文(Context)的实现为ActionContext,下面是上下文(Context)的结构示意图 2.访问上下文(Context)中的对象需要使用#符号标注命名空间,如 #application、#session 另外OGNL会设定一个根对象(root对象),在Struts2中根对象就是ValueStack (值栈)。如果要访问根对象(即ValueStack)中对象的属性,则可以省略#命名空间,直接访问该对象的属性即可。 在struts2中,根对象ValueStack的实现类为OgnlValueStack,该对象不是我们想像的只存放单个值,而是存放一组对象。在OgnlValueStack类里有一个List 类型的root变量,就是使用他存放一组对象 |--request |--application context ------|--OgnlValueStack root变量[action, OgnlUtil, ... ] |--session |--attr |--parameters 在root变量中处于第一位的对象叫栈顶对象。通常我们在OGNL表达式里直接写上属性的名称即可访问root变量里对象的属性,搜索顺序是从栈顶对象开始寻找,如果栈顶对象不存在该属性,就会从第二个对象寻找,如果没有找到就从第三个对象寻找,依次往下访问,直到找到为止。 大家注意: Struts2中,OGNL表达式需要配合Struts标签才可以使用。如: 3.由于ValueStack(值栈)是Struts 2中OGNL的根对象,如果用户需要访问值栈中的对象,在JSP页面可以直接通过下面的EL表达式访问ValueStack(值栈)中对象的属性: ${foo} //获得值栈中某个对象的foo属性
struts2题目
1.下面关于Struts2描述正确的是()。 A. Struts2是线程安全的 B. Strut2为每个请求都只生成一个Action实例 C .Strut2是在Struts1基础上发展起来的 D. Struts2只支持jsp视图组件 2.Struts2配置包时,必须继承struts-default包,在下 面的哪个文件中可以找到struts-default包的配置()。 A.default.properties B. struts-message.properties C. struts.dtd D.struts-default.xml 3.Struts2默认的处理结果类型是()。 A. dispatcher B. redirect C. chain D. 以上说法都不正确 4.在Struts2框架中,实现Action接口的作用是()。 A.实现其中的execute()方法 B.实现数据校验 C.实现国际化 D.规范Action类 5.在Struts2中动态方法调用的格式为()。 A. ActionName_methodName.do B. ActionName!methodName.do C. ActionName_methodName.action D. ActionName!methodName.action 6.在Struts2中自定义的类型转换器必须实现的接口是 ()。 A.Convert B.TypeConverter C. StrutsTypeConverter D. StrutsConvert 7.在Struts2中,Action类中的属性从表单获取用户输入 的值,以下哪个组件将表单的值解析出来赋给Action ()。 A. ActionServlet B. Action C. 拦截器栈 D. HttpServletRequest 8.在Struts2中,关于Struts2标签使用
Struts2标签使用 (1): ---- 文本输入框 使用: (2): ----- 文本域输入框 使用: (3): ----- 密码输入框 使用: 前三个基本都是一样的。如果是要显示值的话可以这样:value = “实体Bean。Get***()”。 (4): ---- 单选按钮 使用:其中list 属性是必须要有的。 <1>:第一种方式:list = “#{‘male’:’男’,’female’:’女’}”
<2>:第二中方式:list = “#request/session.list”。 ---- 与action 结合起来了。 如果要默认选中的话后面加上value = “”.也可以通过javascript 的方式来默认选中。 (5): --- url连接 --- 超链接 这两个标签一般结合起来来使用。 使用: (6): --- 获取相应form的值 使用: <1>:
struts标签说明
常用Struts标签的使用说明 Struts Html标签库 1,:生成HTML
struts2复习题(含答案)
Struts2复习题 1.以下属于struts2的控制器组件是: A.Action B.ActionForm C.ActionServlet D.dispatchAction 2.以下属于struts2的体系结构的是:(多选) A.struts2控制器组件 B.struts2配置文件 C.FilterDispathcer D.Action 3.以下属于struts2配置文件中的配置元素是:(多选) A. B. C. D. 4.关于struts1和struts2对比的说法正确的是: A.struts1要求Action类继承struts1框架中的Action父类,struts2中则不一定需要继承,可以是POJO类 B.struts1中的Action不是线程安全的,而struts2中的Action是线程安全的 C.struts1和struts2中都使用ActionForm对象封装用户的请求数据 D.struts1使用OGNL表达式语言来支持页面效果,struts2通过ValueStack技术使标签库访问值 5.以下关于ValueStack说法正确的是:(多选) A.每个Action对象实例拥有一个ValueStack对象 B.每个Action对象实例拥有多个ValueStack对象 C.Action中封装了需要传入下一个页面的值,这些值封装在ValueStack对象中 D.ValueStack会在请求开始时被创建,请求结束时消亡 6.关于struts2配置文件说法正确的是: A.必须在WEB-INF/classes目录下 B.名字必须为struts.xml C.配置Action时,必须配置包信息 D.使用元素配置转发 7.在struts2配置中用()元素来配置常量: A. B. C. D. 8.关于struts2包的说法正确的是: A.struts2框架使用包来管理常量 B.struts2框架定义包时必须指定name属性 C.struts2框架中配置包时,必须继承自struts-default包,否则会报错 D.struts2框架中使用包来管理Action 9.struts2中获取Servlet API的方法正确的是:(多选) A.使用ActionContext对象以解耦合的方法访问Servlet API B.使用ServletActionContext对象以解耦合的方式访问Servlet API C.使用ActionContext对象以耦合的方式访问Servlet API D.使用ServletActionContext对象以耦合的方式访问Servlet API 10.struts2动态调用的格式为: A.ActionName?methodName.action B.ActionName! methodName.action C.ActionName*methodName.action D.ActionName@mathodName.action 11.如果要实现struts2的数据校验功能 A.普通Action类可以实现
Struts2_day03笔记
Struts2_day03 前一天内容 1 在action获取表单提交数据 (1)使用ActionContext类获取 (2)使用ServletActionContext类获取 (3)接口注入 2 结果配置 (1)全局结果页面和局部结果页面 (2)result标签type属性 - type属性值: -- 默认值是dispatcher做转发 -- redirect做重定向 -- chain转发到action -- redirectAction重定向到action 3 struts2提供获取表单数据方式 (1)属性封装 (2)模型驱动封装 (3)表达式封装 4 struts2获取数据封装到集合中 5 使用模型驱动和属性封装注意问题: (1)不能同时使用对同一个表单进行数据操作 6 表达式封装和模型驱动比较 (1)相同点:可以把数据封装到实体类对象里面 (2)不同的:表达式封装可以封装到多个实体类对象里面今天内容 1 ognl概述 2 ognl入门案例 3 什么是值栈 (1)servlet和action区别
(2)值栈存储位置 - 每个action对象里面有一个值栈对象 - 值栈对象里面有action引用 4 如何获取值栈对象 5 值栈内部结构 (1)root:list集合 (2)context:map集合 6 向值栈放数据 (1)s:debug标签 (2)向值栈放字符串 (3)向值栈放对象 (4)向值栈放list集合 - set方法 - push方法 - 定义变量,get方法 7 从值栈获取数据 (1)从值栈获取字符串 (2)从值栈获取对象 (3)从值栈获取list集合 - s:iterator标签使用 8 EL表达式获取值栈数据 (1)增强request里面getAttribute方法 9 ognl表达式#、%使用 OGNL概述 1 之前web阶段,学习过EL表达式,EL表达式在jsp中获取域对象里面的值 2 OGNL是一种表达式,这个表达式功能更加强大, (1)在struts2里面操作值栈数据 (2)一般把ognl在struts2操作:和struts2标签一起使用操作值栈 3 OGNL不是struts2的一部分,单独的项目,经常和struts2一起使用 (1)使用ognl时候首先导入jar包,struts2提供jar包
struts2_day03笔记
Struts2 框架第三天 今天重点内容安排: 第一天:struts2 开发流程、访问Action,Action方法调用,结果集类型 第二天:获取请求参数,请求数据校验机制,拦截器 1、V alueStack 值栈的存储原理和相关操作 2、Ognl 表达式语言语法 3、struts2 页面控制标签 4、struts2 form表单相关标签 重点难点:值栈和Ognl 1.值栈和Ognl表达式 1.1.什么是Ognl Ognl 对象导航图语言Object Graphic Navigation Language,类似EL,比EL ${}语法要强大很多,Struts2框架使用OGNL作为默认的表达式语言必须要引入struts标签库 EL Expression Language 表达式语言,用来获取JSP页面四个域范围数据 pageContext、request、session、application )
Ognl 主要用法: 1、访问OGNL上下文值栈对象获取数据(最重要) 2、操作集合对象(结合struts2 标签库使用)---- 生成checkbox 、生成select 1.2.什么是值栈ValueStack接口! 值栈ValueStack 实际上是一个接口,struts2 Ognl使用都是基于值栈完成的 Struts2 内部提供OgnlValueStack的接口实现类,实现了值栈接口! 前端控制器每一次请求都会创建一个值栈对象源码:
一次请求对应一个值栈对象值栈生命周期= request 生命周期的!! 值栈是struts2 一个数据结构,贯穿整个Action实例生命周期(request生命周期),一次请求对应一个Action实例,一个Action实例对应一个值栈实例 值栈保存了Action 和其它常用web对象的引用,通过值栈,间接操作这些对象!1.3.值栈的存储结构 1:采用标签查看值栈结构图:
Struts2标签中 sif test 判断String类型的对象属性值和单字符是否相等的问题
Struts2 用s:if test 判断String类型的对象属性值和单字符是否相等的问题Struts2 用s:if test 判断String类型的对象属性值和单字符是否相等的问题 首先,这里所指的单字符形如:Y,男。 有两种做法: a. b. 解释如下: 因为java是强类型语言,单引号表示char类型,而双引号则表示String类型。所以a中可以正常使用,而b中则需要用toString()方法将char类型转为String类型。 实际使用 (1) checked="checked" />${name} (2)checked="checked"/> 其中,pieFunType和roworCol为后台传过来的字符串
Struts2知识点总结
Struts2基础知识 Struts2概述 1.Struts2框架应用javaee三层结构中的web层框架。 2.Struts2框架在struts1和webwork基础之上发展的全新框架。 3.Struts2所解决的问题: 在以往实现一个功能时,都需要写很多的servlet,从而造成后期维护上的不方便。 图解: 4.现在比较稳定的Struts2版本 struts-2.3.24-all.zip 5.web层常见框架 1.struts 2.springMVC Struts2框架入门 1.导入jar包 1.在lib里面有jar包,但不能全部导入,因为里面含有一些spring 包,是不能使用的,导入会导致程序不能运行。 2.到app目录里面复制案例的jar包是最好的方法。 2.创建action 3.配置action类的访问路径
1.创建struts2核心配置文件,该核心配置文件位置和名称是固定的, 位置必须在src下面,名称为struts.xml 。 2.引入dtd约束,可以在案例文件中找到,复制在struts.xml文件中即 可。 3.action的配置 *注意访问路径: http://域名/端口号/项目名/action名.action 注意:.action可以省略,但建议不要省略,为了兼容一些老版本的浏览器。 4.配置Struts2的过滤器,可以在案例中的web.xml文件中找到,复制粘贴 即可。 Struts2执行过程 图解:
Struts2配置
1.是一种常量标签 2.修改Struts2的默认常量值 1.常用方式 在struts.xml中进行配置。 2.其它两种方式 1.在src下面创建struts.properties文件并修改。 2.在web.xml文件中进行修改。 3.Struts2最常用的常量 struts.il8n.encoding=UTF-8,解决表单在通过post方式提交中文时,中文乱码的问题。
struts2常用标签
常用的Struts 2.0的标志(Tag )介绍 在上一篇文章《为Struts 2.0做好准备》中,我过于详细地介绍了Struts 2.0开发环境和运行环境的配置,所以,本文很少涉及的以上两方面的细节。如果,您看完《为Struts 2.0做好准备》后,还有什么不明白,或者没法运行文中例子,请联系我。我的E-MAIL :Max.M.Yuan@https://www.wendangku.net/doc/9e12352100.html, 。 在介绍常用标志前,我想先从总体上,对Struts 1.x 与Struts 2.0的标志库(Tag Library )作比较。 分类 将标志库按功能分成HTML 、Tiles 、Logic 和Bean 等几部分 严格上来说,没有分类,所有标志都在URI 为“/struts -tags” 命名空间下,不过,我们可以从功能上将其分为两大类:非UI 标志和UI 标志 表达式语言(expression languages ) 不支持嵌入语言(EL ) OGNL 、JSTL 、 Groovy 和Velcity 以上表格,纯属个人总结,如有所不足或错误,请不吝指正 好了,我要开始介绍“常用”(这里所谓的“常用”,是指在已往工作中使用Struts 里经常用到的)的标志了。 要在JSP 中使用Struts 2.0标志,先要指明标志的引入。通过在JSP 的代码的顶部加入以下代码可以做到这点。 <%@taglib prefix ="s" uri ="/struts-tags" %> 1. 非UI 标志 o if 、elseif 和else 描述: 执行基本的条件流转。 参数: 名称 必需 默 认 类型 描述 备注 test 是 Boolean 决定标志里内容是否显示的表达式 else 标志没有这个参数
struts2面试题(自己总结)
Struts2面试题 1、struts2工作流程 Struts 2框架本身大致可以分为3个部分: 核心控制器FilterDispatcher、业务控制器Action和用户实现的企业业务逻辑组件。核心控制器FilterDispatcher是Struts 2框架的基础,
包含了框架内部的控制流程和处理机制。 业务控制器Action和业务逻辑组件是需要用户来自己实现的。 用户在开发Action和业务逻辑组件的同时,还需要编写相关的配置文件, 供核心控制器FilterDispatcher来使用。 Struts 2的工作流程相对于Struts 1要简单,与WebWork框架基本相同, 所以说Struts 2是WebWork的升级版本。基本简要流程如下: 1 、客户端初始化一个指向Servlet容器的请求; 2、这个请求经过一系列的过滤器(Filter) (这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器, 这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin) 3 、接着FilterDispatcher被调用, FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action 4、如果ActionMapper决定需要调用某个Action, FilterDispatcher把请求的处理交给ActionProxy 5、ActionProxy通过Configuration Manager询问框架的配置文件, 找到需要调用的Action类 6、ActionProxy创建一个ActionInvocation的实例。 7、ActionInvocation实例使用命名模式来调用, 在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。 8、一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可能是另外的一个Action链)一个需要被表示的JSP 或者FreeMarker的模版。在表示的过程中可以使用Struts2 框架中继承的标签。在这个过程中需要涉及到ActionMapper 9、响应的返回是通过我们在web.xml中配置的过滤器 10、如果ActionContextCleanUp是当前使用的,则FilterDispatecher将不会清理sreadlocal ActionContext;如果ActionContextCleanUp不使用,则将会去清理sreadlocals。 2、说下Struts的设计模式 MVC模式: web应用程序启动时就会加载并初始化ActionServler。用户提交表单时,一个配置好的ActionForm对象被创建,并被填入表单相应的数据,ActionServler根据Struts-config.xml文件配置好的设置决定是否需要表单验证,如果需要就调用ActionForm的Validate()验证后选择将请求发送到哪个Action,如果Action不存在,ActionServlet会先创建这个对象,然后调用Action的execute()方法。Execute()从ActionForm对象中获取数据,完成业务逻辑,返回一个ActionForward对象,ActionServlet再把客户请求转发给ActionForward对象指定的jsp组件,ActionForward对象指定的jsp生 成动态的网页,返回给客户。
STRUTS2模拟(答案)
STRUTS2模拟测试(开卷——定时90分钟) 一、填空题 1.Struts2框架由___Struts1________和____WebWork_______框架发展而来。(Struts&WebWork ) 2.Struts2以___WebWork______为核心,采用____拦截器_______的机制来处理用户的请求。(WebWork,拦截器)3.构建Struts2应用的最基础的几个类库是struts-core-2.1.6.jar___________、__xwork-2.1.2.jar_________、__ognl-2.6.11.jar_________ 、_freemarket-2.3.13、_commons-logging-1.0.4.jar_________以及 ___commons-fileupload-1.2.1.jar________。 4.Struts2中的控制器类是一个普通的_____class______。Class 5.如果要在JSP页面中使用Struts2提供的标签库,首先必须在页面中使用taglib编译指令导入标签库,其中taglib编译指令为_<%@ taglib prefix=”s” uri=”/struts-tags”%>__________。<%taglib uri="/struts-tags" prefix="s"%> 6.在Struts2表单标签库中,表单标签为___________。 7.ActionSupport类实现了____Action_______接口和_Validateable__________等接口。 8.通过控制器类中的___validate()________方法来输出校验错误信息。 二、选择题 1.不属于Action接口中定义的字符串常量的是_____B______。B A.SUCCESS B.FAILURE C.ERROR D.INPUT 2.在控制器类中一般需要添加相应属性的____A_______和____C_______。AC A.setter方法 B.as方法 C.getter方法 D.is方法 3.控制器需要在____B_______配置文件中进行配置。B A.web.xml B.struts.xml C.struts2.xml D.webwork.xml 4.不属于Struts 2表单标签库的是_____D______。D A. B. C. D.