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. JAVASCRIPT事件详解-------原生事件基础....

    javaScirpt事件详解-原生事件基础(一)   事件 JavaScript与HTML之间的交互是通过事件实现的.事件,就是文档或浏览器窗口中发生的一些特定的交互瞬间,通过监听特定事件的发生,你能 ...

  2. 【Todo】【读书笔记】Java多线程编程指南-设计模式篇

    下了这本书<Java多线程编程指南-设计模式篇>, 还有另一本<JAVA多线程设计模式>,据说内容有重复,结合着看.

  3. The specified child already has a parent错误

    10-05 23:39:48.187: E/AndroidRuntime(12854): Caused by: java.lang.IllegalStateException: The specifi ...

  4. D3.js 饼状图的制作

    1.数据 有如下数据,需要可视化: var dataset = [ 30 , 10 , 43 , 55 , 13 ]; 这样的值是不能直接绘图的.例如绘制饼状图的一个部分,需要知道一段弧的起始角度和终 ...

  5. jQuery中对属性的增删改查

    获取元素的属性 $('input').attr('type') .attr()  可以获取和设置自定义属性 .prop()  只能获取和设置固有属性 在设置属性值时 建议不要修改type属性,有的浏览 ...

  6. iOS开发 画六边形(多边形)

    - (void)drawRect:(CGRect)rect { UIBezierPath * path = [UIBezierPath bezierPath]; [path moveToPoint:C ...

  7. Hbase之校验指定数据是否存在

    import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; impo ...

  8. TensorFlow Playground

    A Neural Network Playground Understanding neural networks with TensorFlow Playground 机器之心翻译

  9. JUnit org.junit.runner.Request.classWithoutSuiteMethod解决方法

    欢迎和大家交流技术相关问题: 邮箱: jiangxinnju@163.com 博客园地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://g ...

  10. Laravel 实现定时任务

    运行命令schedule run 时laravel会去App\console\kernel.php文件中查找schedule方法,有没有要执行的定时命令 实现流程:首先可以自定义命令并注册命令(参考上 ...