result:

  1). result 是 action 节点的子节点

  2). result 代表 action 方法执行后, 可能去的一个目的地

  3). 一个 action 节点可以配置多个 result 子节点.

  4). result 的 name 属性值对应着 action 方法可能有的一个返回值.   <result name="index">/index.jsp</result>

  5). result 一共有 2 个属性, 还有一个是 type: 表示结果的响应类型

  6). result 的 type 属性值在 struts-default 包的 result-types 节点的 name 属性中定义.

    常用的有   > dispatcher(默认的): 转发. 同 Servlet 中的转发.

           > redirect: 重定向

           > redirectAction: 重定向到一个 Action        注意: 通过 redirect 的响应类型也可以便捷的实现 redirectAction 的功能!

<result name="index" type="redirectAction">
<param name="actionName">testAction</param>
<param name="namespace">/atguigu</param>
</result>

   OR

<result name="index" type="redirect">/atguigu/testAction.do</result>

          > chain: 转发到一个 Action     注意: 不能通过 type=dispatcher 的方式转发到一个 Action.  只能是

<result name="test" type="chain">
<param name="actionName">testAction</param>
<param name="namespace">/atguigu</param>
</result>

  不能是:

<result name="test">/atguigu/testAction.do</result>

通配符映射

  可以利用 struts 提供的通配符映射机制把多个彼此相似的映射关系简化为一个映射关系

通配符映射规则

  –若找到多个匹配, 没有通配符的那个将胜出

  –若指定的动作不存在, Struts 将会尝试把这个 URI 与任何一个包含着通配符 * 的动作名及进行匹配

  –被通配符匹配到的 URI 字符串的子串可以用 {1}, {2} 来引用. {1} 匹配第一个子串, {2} 匹配第二个子串…

  –{0} 匹配整个 URI

  –若 Struts 找到的带有通配符的匹配不止一个, 则按先后顺序进行匹配

  –* 可以匹配零个或多个字符, 但不包括 / 字符. 如果想把 / 字符包括在内, 需要使用 **. 如果需要对某个字符进行转义, 需要使用 \.

动态方法调用

  通过 url 动态调用 Action 中的方法

 URI:
  –/struts-app2/Product.action: Struts 调用 Product 类的 execute
  –/struts-app2/Product!save.action: Struts 调用 Product 类的 save() 方法
 默认情况下, Struts 的动态方法调用处于禁用状态(不建议使用)
	<!-- 打开允许动态方法调用的开关, 默认是 false -->
<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>

OGNL

  在 JSP 页面上可以可以利用 OGNL(Object-Graph Navigation Language: 对象-图导航语言) 访问到值栈(ValueStack) 里的对象属性.

  若希望访问值栈中 ContextMap 中的数据, 需要给 OGNL 表达式加上一个前缀字符 #. 如果没有前缀字符 #, 搜索将在 ObjectStack 里进行.

1. 关于值栈:

  1). helloWorld 时, ${productName} 读取 productName 值, 实际上该属性并不在 request 等域对象中, 而是从值栈中获取的.

  2). ValueStack:

    I.  可以从 ActionContext 中获取值栈对象

    II. 值栈分为两个逻辑部分

      > Map 栈: 实际上是 OgnlContext 类型, 是个 Map, 也是对 ActionContext 的一个引用.

        里边保存着各种 Map:requestMap, sessionMap, applicationMap, parametersMap, attr

      > 对象栈: 实际上是 CompoundRoot 类型, 是一个使用 ArrayList 定义的栈. 里边保存各种和当前 Action 实例相关的对象.是一个数据结构意义的栈.

2. Struts2 利用 s:property 标签和 OGNL 表达式来读取值栈中的属性值

  1). 值栈中的属性值:

    > 对于对象栈: 对象栈中某一个对象的属性值

    > Map 栈: request, session, application 的一个属性值 或 一个请求参数的值.

  2). 读取对象栈中对象的属性:

    > 若想访问 Object Stack 里的某个对象的属性. 可以使用以下几种形式之一: object.propertyName ; object['propertyName'] ; object["propertyName"]

    > ObjectStack 里的对象可以通过一个从零开始的下标来引用. ObjectStack 里的栈顶对象可以用 [0] 来引用, 它下面的那个对象可以用 [1] 引用.

    > [n] 的含义是从第 n 个开始搜索, 而不是只搜索第 n 个对象

    > 若从栈顶对象开始搜索, 则可以省略下标部分: message

    > 结合 s:property 标签: <s:property value="[0].message" />  <s:property value="message" />

    3). 默认情况下, Action 对象会被 Struts2 自动的放到值栈的栈顶.

调用字段和方法

  可以利用 OGNL 调用

    –任何一个 Java 类里的静态字段或方法.

    –被压入到 ValueStack 栈的对象上的公共字段和方法.

  默认情况下, Struts2 不允许调用任意 Java 类静态方法,  需要重新设置 struts.ognl.allowStaticMethodAccess 标记变量的值为 true.

  调用静态字段或方法需要使用如下所示的语法:

    –@fullyQualifiedClassName@fieldName:  @java.util.Calendar@DECEMBER

    –@fullyQualifiedClassName@methodName(argumentList):  @app4.Util@now()

  调用一个实例字段或方法的语法, 其中 object 是 Object Stack 栈里的某个对象的引用:

    –.object.fieldName: [0].datePattern

    –.object.methodName(argumentList): [0].repeat(3, “Hello”);

访问数组类型的属性

  有些属性将返回一个对象数组而不是单个对象, 可以像读取任何其他对象属性那样读取它们. 这种数组型属性的各个元素以逗号分隔, 并且不带方括号

  可以使用下标访问数组中指定的元素: colors[0]

  可以通过调用其 length 字段查出给定数组中有多少个元素: colors.length

访问 List 类型的属性

  有些属性将返回的类型是 java.util.List, 可以像读取任何其他属性那样读取它们. 这种 List 的各个元素是字符串, 以逗号分隔, 并且带方括号

  可以使用下标访问 List 中指定的元素: colors[0]

  可以通过调用其 size 方法或专用关键字 size 的方法查出给定List 的长度: colors.size 或 colors.size()

  可以通过使用 isEmpty() 方法或专用关键字 isEmpty 来得知给定的 List 是不是空. colors.isEmpty 或 colors.isEmpty()

  还可以使用 OGNL 表达式来创建 List, 创建一个 List 与声明一个 Java 数组是相同的: {“Red”, “Black”, “Green”}

访问 Map 类型的属性

  若希望检索出某个 Map 的值, 需要使用如下格式: map[key]

  可以使用 size 或 size() 得出某个给定的 Map 的键值对的个数

  可以使用 isEmpty 或 isEmpty() 检查某给定 Map 是不是空.

  可以使用如下语法来创建一个 Map:

aaarticlea/png;base64,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" alt="" width="594" height="32" />

使用 EL 访问值栈中对象的属性

  <s:property value=“fieldName”> 也可以通过 JSP EL 来达到目的: ${fieldName}

  原理: Struts2 将包装 HttpServletRequest 对象后的 org.apache.struts2.dispatcher.StrutsRequestWrapper 对象传到页面上, 而这个类重写了 getAttribute() 方法.

异常处理: exception-mapping 元素

  exception-mapping 元素: 配置当前 action 的声明式异常处理

  exception-mapping 元素中有 2 个属性

    –exception: 指定需要捕获的的异常类型。异常的全类名

    –result: 指定一个响应结果, 该结果将在捕获到指定异常时被执行, 既可以来自当前 action 的声明, 也可以来自 global-results 声明.

  声明式异常处理机制由  ExceptionMappingInterceptor 拦截器负责处理, 当某个 exception-mapping 元素声明的异常被捕获到时, ExceptionMappingInterceptor 拦截器就会向 ValueStack 中添加两个对象:

    –exception: 表示被捕获异常的 Exception 对象

    –exceptionStack: 包含着被捕获异常的栈

  可以在视图上通过 <s:property> 标签显示异常消息

 

struts2的 result 通配符 OGNL的更多相关文章

  1. Struts2 配置文件result的name属性和type属性

    Struts2 配置文件result的name属性和type属性:Name属性SUCCESS:Action正确的执行完成,返回相应的视图,success是 name属性的默认值: NONE:表示Act ...

  2. Struts2 中result type属性说明

    Struts2 中result type属性说明 首先看一下在struts-default.xml中对于result-type的定义: <result-types><result-t ...

  3. Struts2之Result详解

    上一篇我们把Struts2中的Action接收参数的内容为大家介绍了,本篇我们就一起来简单学习一下Action的4种Result type类型,分为:dispatcher(服务端页面跳转):redir ...

  4. struts2 action result type类型

    struts2 action result type类型 1.chain:用来处理Action链,被跳转的action中仍能获取上个页面的值,如request信息. com.opensymphony. ...

  5. struts2的@Result annotation 如何添加params,并且在页面取值

    http://www.bubuko.com/infodetail-2492575.html .............................................. 标签:lai  ...

  6. Struts2中 Result类型配置详解

    一个result代表了一个可能的输出.当Action类的方法执行完成时,它返回一个字符串类型的结果码,框架根据这个结果码选择对应的result,向用户输出.在com.opensymphony.xwor ...

  7. [原创]java WEB学习笔记59:Struts2学习之路---OGNL,值栈,读取对象栈中的对象的属性,读取 Context Map 里的对象的属性,调用字段和方法,数组,list,map

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  8. Struts2 语法--result type

    result type: dispatcher,redirect:只能跳转到jsp,html之类的页面,dispatcher属于服务器跳转, redirect属于客户端跳转 chain: 等同于for ...

  9. Struts2学习笔记四 OGNL

    OGNL,全称为Object-Graph Navigation Language(对象图表达语言),它是一个功能强大的表达式语言,用来获取和设置Java对象的属性,调用java对象的方法,同时能够自动 ...

随机推荐

  1. golang 资源

    1.Learning Go <学习Go语言> http://www.miek.nl/projects/learninggo/中文版http://mikespook.com/learning ...

  2. mustache.js渲染带事件的模板

    http://zccst.iteye.com/blog/2183111 最近遇到这样一个问题,预览内容可点击,问题是通过$.Mustache.render("templateId" ...

  3. windows服务名称不是单个单词的如何启动?

    比如要启动  Memcached Server: 命令行中输入命令要注意大小写,大小写要保持一致,正确的写法如下: net  start  "Memcached Server". ...

  4. 【CDN】域名无法访问,ping不到,tracert不到

    背景:香港服务器,CDN服务商:Incapsula 1.首先猜测,域名是否被墙 原因:ip可以直接访问到网站,其他域名指向服务器也可访问 排查:1)首先理解,怎样才算被墙:大陆外可以通过该域名访问,大 ...

  5. K均值聚类(Kmeans)

    Sigma = [1, 0; 0, 1]; mu1 = [1, -1]; x1 = mvnrnd(mu1, Sigma, 200); mu2 = [5.5, -4.5]; x2 = mvnrnd(mu ...

  6. Edit Distance编辑距离(NM tag)- sam/bam格式解读进阶

    sam格式很精炼,几乎包含了比对的所有信息,我们平常用到的信息很少,但特殊情况下,我们会用到一些较为生僻的信息,关于这些信息sam官方文档的介绍比较精简,直接看估计很难看懂. 今天要介绍的是如何通过b ...

  7. php 执行外部命令exec() system() passthru()

    php 执行部命令exec() system() passthru() 通常用c写一个外部小程序,然后使用上述命令可以在php中调用 1. exec() string exec ( string $c ...

  8. aspcms网站访问出现3706错误, 错误描述:未找到提供程序。该程序可能未正确安装,解决的方法。

       

  9. 有关mipmaps

    Mipmaps的作用是什么,仅仅是为了使屏幕三角形和纹理三角形的差异变小?有没有以空间换时间的理念? Mipmaps在生成一系列小的纹理样本时, 是如何从原始纹理采样的?即如何生成这些小的纹理样本.

  10. Cmd Markdown 高阶语法手册

    『Cmd 技术渲染的沙箱页面,点击此处编写自己的文档』 Cmd Markdown 高阶语法手册 1. 内容目录 在段落中填写 [TOC] 以显示全文内容的目录结构. [TOC] 2. 标签分类 在编辑 ...