ActionMapping的属性

path属性
ActionMapping URI,或者path,对用户来说就象web server上的一个文件。但实际上它并不
代表一个文件。它是一个对ActionMapping的虚拟引用。
因为它暴露给其它系统, path 并不真正是个逻辑名称,就象那些我们用于ActionForward
中的一样。 path 可以包括反斜杠和扩展名--如果它引用一个文件系统——但它们都只是
一个单一名称的一部分。
ActionMapping自身是一个“平面的” 名称空间,完全没有内部层次关系。它仅仅是正好使用
了一个和层次性文件系统中一样的名称而已。
当然, 这对处理ActionMapping仍然是有帮助的,就象它们是一个层次关系或者在同一个"文
件夹"下的相关命令组的一部分。唯一的限制是名称必须匹配于在应用部署描述文件中为
ActionServlet指定的样式。这通常是/do/*或者 *.do,但是其它相似的样式也可以使用。如果
你在一个团队环境中工作,不同的团队可能有不同的 ActionMapping 名称空间使用。某些
人可能工作于/customer ActionMapping, 而另一些可能工作于/vendor ActionMapping。
这也可能和各个团队使用的Java 包的层次相关。因为 ActionMapping URI是逻辑的构造,
所以你可以用它来以各种方式组织来适合你的项目。

forward 属性
当指定了forward 属性时,servlet将不会把请求传递给Action类,而是调用
RequestDispatcher.forward。因为操作没有使用Action 类, 它也可以被用来进行
Struts 和其它资源之间的集成,或者用来构建系统原型。forward, include, 以及 type
属性是互斥的

include 属性
当指定了include 属性时, servlet将不会把请求传递给Action 类而是调用
RequedtDispatcher.include方法。因为操作没有使用Action 类, 它也可以被用来机械
进行Struts 和其它组件之间的集成。forward, include, 以及 type 属性是互斥的。

type 属性
大部分 mapping都会指定一个 Action 类类型,而不是一个forward 或者 include。Action 类
可以被多个mapping使用。 Mapping可以指定form bean,参数,forward,或者exceptions属
性。forward, include, 以及 type 属性是互斥的。

classname属性
如果被指定,classname 是应该用于此对象的ActionMapping子类的全限定Java类名称。这
就允许你使用你自己的ActionMapping 子类来引入特定的方法和属性。参见7.4节。

name属性
如果在Struts 配置文件中配置了相应的formbean段的话,这个属性指定了form bean的
逻辑名称。缺省情况下,这也是将form bean 放入请求或者会话上下文时使用的名称。使
用该类的attribute 属性来指定不同的属性(Attribute)关键字。

roles属性
这个属性是一个逗号分隔的,允许访问该ActionMapping 对象的安全角色称的列表。缺省情
况下,与基于容器的安全机制所使用的同一个系统将用于这里给定的角色列表。这意味着你
可以通过在部署描述符中指定特定的URL模板而使用基于action的安全,或者两者都使用。
安全检查由请求处理器(org.apache.struts.action.RequestProcessor)的
processRoles方法处理。通过子类化请求处理器,你也可以在基于应用的安全下使用
roles 属性。

scope属性
ActionForm bean 可以存储在当前的请求或会话范围中(这样它可以服务于另外的请求)。
虽然大部分开发人员使用请求范围来存储ActionForm, 框架的缺省设置却是会话范围

validate属性
ActionForm 生命周期内的一个重要步骤是在其数据提供给业务层之前需要进行校验。当
mapping 的validate 属性设置为true时,ActionServlet将调用ActionForm的 validate 方
法。如果 validate 返回false,请求将被转发到input 属性指定的资源。
经常,开发人员将为每个数据输入表单创建两个mapping。一个mapping 将使 validate 设
置为 false, 所以你可以创建一个空的表单。另一个则设置validate 为true,用来提交完整
的表单。

input属性
当validate被设置为true时,重要的是需要提供一个有效的输入路径。这也是当ActionForm
validate 方法返回 false时,控制应该被传递到的地方。通常这是一个表现页面。有时也
可以是另外一个用来产生页面所需要的数据对象的Action path (其 validate 必须设置为
false)。

输入转发
在Struts 1.0中,ActionMapping的 input 属性通常是一个字面的URI。在Struts 1.1中,它也
可以是一个ActionForward 的名称。ActionForward 被获取之后,其path 属性被用作input
属性。这也可以是一个全局或者局部转发。
这儿为了使用 ActionForward而不是字面的path, 可以设置这个模块的<controller> 元
素的inputForward 属性为 true:
<controller inputForward="true">

parameter属性
这个普通的paramenter属性允许Action能够在运行时被配置。许多标准的Struts Action都使用
这个属性,标准的Scaffold Action也经常使用它。Parameter属性可以包含URI, 方法名称,类
名称,或者其它一些Action在运行时可能需要的信息。这种灵活性允许一些Action履行双倍
或者三倍的职责,削减应用所需的不同的类的数量。
在一个Action 类中,parameter属性是从传递到perform的mapping中取得的:
parameter = mapping.getparameter();

attribute属性
不时地,你可能需要同时在同一个上下文中保存同一个ActionForm 的在两份拷贝。这在
ActionForm被存于会话上下文中作为工作流的一部分时,经常发生这种情况。为了避免它们
之间的名称冲突,你可以使用 attribute 属性来给一个 ActionForm bean 一个不同的名
称。另一个方法是在配置中定义另一个ActionForm bean,使用相同的类型但使用不同的名称。

prefix和suffix属性
与 attribute属性一样, prefix 和suffix 属性可用来避免应用系统中的名称冲突。如
果指定了这个属性,这就表明允许在属性名称前面加上前缀或者后缀,形成它们从请求中被
组装时的一个别名。
如果指定了前缀 this,那么在ActionForm组装时:
thisName=McClanahan
相当于
name=McClanahan
而它们都可以通过调用
getName("McClanahan");
取得。这并不影响属性如何被标签扩展输出。它只影响到自动组装机制如何从请求中感知它们

unknown ActionMapping
在Web上冲浪时,大都遇到过讨厌的404— pages not found信息。大部分web server 都提供一些特殊的特征来处理对未知页面的请求,所以 webmaster 可以将用户引导到正确的方向上。
Struts 提供了一个类似的服务来处理404错误—即unknown ActionMapping。
在Struts 配置文件中,你可以指定一个ActionMapping 来接收所有与其它ActionMapping不相
匹配的请求:
<action
name="/debug"
forward="/pages/debug.jsp"/>
如果没有设置它,没有匹配对的ActionMapping请求就会抛出:
400 Invalid path /notHere was Requested
请注意通过对ActionMapping请求, 我们的意思是URI首先必须匹配为servlet指定的前缀或者
后缀 (通常是 /do/* 或者 *.do)。对于其它样式的请求, 无论好坏,都将被容器中的其它
servlet处理:
/do/notHere (goes to the unknown ActionMapping)
/notHere.txt(goes to the Container)

比较多,不过常用的也就是path,type,scope,name,parameter如果要在form里做验证要写input,validate.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值