`

Struts2 中#、%和$符号的用途(转载)

阅读更多

Struts2 中#、%和$符号的用途(转载)

 

#、%和$符号在OGNL表达式中经常出现,而这三种符号也是开发者不容易掌握和理解的部分。在这里笔者简单介绍它们的相应用途。

1.#符号的用途一般有三种。
   1)访问非根对象属性,例如示例中的#session.msg表达式,由于Struts 2中值栈被视为根对象,所以访问其他非根对象时,需要加#前缀。实际上,#相当于ActionContext. getContext();#session.msg表达式相当于ActionContext.getContext().getSession(). getAttribute(”msg”) 。

    2)用于过滤和投影(projecting)集合,如示例中的persons.{?#this.age>20}。

    3)用来构造Map,例如示例中的#{’foo1′:’bar1′, ’foo2′:’bar2′}。

2.%符号
%符号的用途是在标志的属性为字符串类型时,计算OGNL表达式的值。如下面的代码所示:
构造Map
<s:set name=”foobar” value=”#{’foo1′:’bar1′, ‘foo2′:’bar2′}” />

<p>The value of key “foo1″ is <s:property value=”#foobar['foo1']” /></p>

<p>不使用%:<s:url value=”#foobar['foo1']” /></p>

<p>使用%:<s:url value=”%{#foobar['foo1']}” /></p>

 

3.$符号
$符号主要有两个方面的用途。

   在国际化资源文件中,引用OGNL表达式,例如国际化资源文件中的代码:reg.agerange=国际化资源信息:年龄必须在${min}同${max}之间。

    在Struts 2框架的配置文件中引用OGNL表达式,例如下面的代码片断所示:

<validators>

    <field name=”intb”>

            <field-validator type=”int”>

            <param name=”min”>10</param>

            <param name=”max”>100</param>

            <message>BAction-test校验:数字必须为${min}为${max}之间!</message>

        </field-validator>

    </field>

****************************************************************

看了这个之后就试了改为value ="%{#session.username}" 奇怪它就真的成功了~~哈哈~

 

     访问值栈中Action的普通属性:userName --> <s:property value="userName" /><br />
     访问值栈中Action的对象的普通属性:user.userName | user['userName'] | user[\"userName\"] --> <s:property value="user.userName" /> | <s:property value="user['userName']" /> | <s:property value="user[\"userName\"]" /><br />
     访问值栈中Action的对象的普通属性:user.firend.userName --> <s:property value="user.firend.userName" /><br />
     访问值栈中Action的普通方法:test() --> <s:property value="test()" /><br />
     访问值栈中Action的属性的普通方法:userName.length() --> <s:property value="userName.length()" /><br />
     访问值栈中Action的对象的普通方法:user.hello() --> <s:property value="user.hello()" /><br />

 

随着注解越来越普遍的使用,struts2也开始支持注解,并宣称支持0配置(XML配置文件),我最近在使用Struts2框架,也顺便了解一了一下Struts2的注解配置.

      1.在Web.xml配置文件中添加

<filter> 
<filter-name>struts2</filter-name> 
        <filter-class> 
                   org.apache.struts2.dispatcher.FilterDispatcher 
         </filter-class> 
    <init-param> 
        <param-name>actionPackages</param-name> 
        <param-value>com.learn.action</param-value> 
     </init-param> 
</filter>
        这样sturts2框架会自动扫描action包中的命名为*Action或者集成ActionSupport的类,例如一个类命名为SearchAction,那么Struts2框架会自动扫描它,认为它为一个Action类,并且将所有search.action的请求都转发给该类进行处理,这时我们又遇到了一个问题,如果这个Action是多Method的Action那么我们又该怎么办呢?因为不能像在XML中那样配置Method属性,这时我们可以在请求是加上!MethodName以请求特定的Method即可,例如想要请求SearchAction的search方法,我们可以直接这样请求:search!search.action.

       以上讲到的是Struts2框架如何找到没有在XML中定义的Action,并且怎么样将请求转发给适当的Action来进行处理.

       我们都知道在XML中可以定义Action处理完以后的跳转,同样利用Annotation也可以做到这一点:

        2.Resules的Annotation定义

        我们只需要在Action Class的类的前面加上@Result即可以定义Action的跳转

        例如:

 

@Results({ 
   @Result(name="input" value="/input.jsp" type=NullResult.class), 
   @Reuslt(name="success" value="/success.jsp" type=NullResult.class), 
   @Result(name="error" value="/error.jsp" type=NullResult.class) 
})
        上面是一个典型的多Result配置,name属性指定返回的字符串,value指定要跳转的页面,type指定Result的类型,type是一个很重要的属性,他有一下几种情况:

        1)NullResult : 默认的可以省略

        2)ActionChainResult : 用于从一个Action跳转到另外一个Action

        例如:

 

@Result 
(name = "search",value= "search",type=ActionChainResult.class, 
params={"method","search"})
        这个配置是如果返回值为"search"就跳转掉SearchAction的search方法,如果不指定params就跳转到SearchAction的execute方法

        3)StreamResult:用于文件下载

        例如:

 

@Result 
(name="success",value="inputStream",type=StreamResult.class, 
params={"bufferSize",FileConstant.DOWNLOAD_BUFFER_SIZE})
        作为Struts2的Annotation配置中最重要的Result配置大致有这几种情况,关于Struts2 Annotation的其他配置我也不是十分了解,就以后在介绍吧!!!

 

分享到:
评论

相关推荐

    Struts2 ognl中的#、%和$符号用法说明

    在Struts2中,OGNL(Object-Graph Navigation Language)是默认表达式语言,用于访问和操作对象的属性。在OGNL表达式中,`#`、`%`和``$`符号扮演着不同的角色,它们是OGNL语法的重要组成部分。下面将详细介绍这三个...

    OGNL中的#、%和$符号用法说明

    它在许多Java应用框架中得到了广泛应用,尤其是在Struts2中作为默认的表达式语言。OGNL中的`#`、`%`和`$`符号各有其独特的功能和应用场景,对于理解和熟练使用这些符号至关重要。 #### #符号的用途 1. **访问根...

    struts2.0标签$ # %的区别

    - **用途**:主要用于国际化资源文件和Struts配置文件中的属性引用。 - **示例**: ```xml ``` 其中,`&lt;s:text&gt;` 标签中的`name`属性使用`$`来引用国际化资源文件中的键。 ##### 2. # 取得ActionContext的值 ...

    OGNL表达式中的#、%和$.txt

    “$”符号在Struts2中主要用作OGNL表达式的起始标记,在模板文件(如JSP页面)中,它用于指示Struts2框架应该解析为OGNL表达式。 1. **模板文件中的应用**: - 示例:`reg.ageRange = $ {min} 到 $ {max}` - 解释...

    ONGL中(#.%.$)三种符号的用法.docx

    在Struts2中,OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,用于获取和设置对象的属性。在给定的文档中,我们关注的是`#.%.$`这三种符号在OGNL中的用法。以下是它们的具体解释: 1. `#`:此...

    % # $ 的区别 及用法

    ### `% # $`的区别及用法 在Struts2框架中,`%`, `#`, `$` 这三...通过以上分析,我们可以看出 `%`, `#`, `$` 这三个符号在Struts2中的应用场景各有不同,合理选择和使用这些符号可以帮助开发者更高效地完成开发任务。

    struts2中#号的用法

    在Struts2中,`#`符号通常用于访问Ognl表达式中的变量。它支持访问不同的作用域,如当前页面、请求范围、会话范围以及应用程序范围。下面将分别介绍这些不同作用域的访问方式: 1. **当前页面**:当需要访问当前...

    ONGL中(#.%.$)三种符号的用法.pdf

    在Struts2框架中,OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,用于获取和设置Java对象的属性。本文将深入探讨OGNL中`#`,`%`,`$`这三个特殊符号的用法。 首先,`#`符号在OGNL中的主要作用是...

    #和$的区别

    - **访问上下文**: 在Struts2中,“#”主要用于访问OGNL上下文和Action上下文。它等同于`ActionContext.getContext()`。通过使用“#”,可以轻松访问到当前的HTTP请求参数、HttpServletRequest属性、HttpSession属性...

    STRUTS2标签中符号_,$,%的用法示例.doc

    - **访问非根对象属性**:在STRUTS2中,ActionContext是默认的根对象,但如果你需要访问像Session这样的非根对象,你需要使用`#`前缀。例如,`#session.msg`表示获取ActionContext的Session属性中的'msg'键的值,...

    Struts2 $,#,%详解及实例代码

    在Struts2中,`$`, `#`, `%`这三个符号在不同场景下有着特定的含义。这里我们将深入探讨它们在Struts2中的用法,并通过一个具体的实例代码来阐述。 首先,`$`符号在Struts2的表达式语言(OGNL,Object-Graph ...

    第五章struts2的标签库.pdf

    $ 符号用于在国际化资源文件中引用 OGNL 表达式和在 Struts 2 框架的配置文件中引用 OGNL 表达式。 Struts 2 的标签库可以分为三类:UI 标签、数据标签和逻辑标签。UI 标签主要用于生成 HTML 页面,数据标签用于...

    教案第五章struts2的标签库.pdf

    $ 符号用于在国际化资源文件中引用 OGNL 表达式和在 Struts 2 框架的配置文件中引用 OGNL 表达式。 Struts 2 标签库可以分为三类:UI 标签、数据标签和逻辑标签。UI 标签用于生成用户界面,数据标签用于显示和输出...

    struts1和struts2的区别

    - **Struts2**: Struts2中的Action更像是工厂模式下的产品,每个Action实例都是线程安全的。Struts2提供了ActionSupport基类来简化Action的实现。Action本身可以是任何实现了特定接口的Java对象,甚至是普通的POJO。...

    struts2 OGNL语言学习笔记

    在 Struts 2 中,OGNL 是默认的表达式语言,原因是它相对其它表达式语言具有多个优势,例如:支持对象方法调用、支持类静态的方法调用和值访问、支持赋值操作和表达式串联等。 在使用 OGNL 时,经常遇到的问题是 #...

    struts2用siftest判断属性和字符串相等时注意双引号和单引号的使用以及%$%#的使用.docx

    `#`符号在Struts2中表示访问堆栈上下文(比如请求、会话、应用上下文)。而`%{#}`是JSP 2.1规范中的新特性,用于从特定的域对象中直接访问属性。 对于其他标签,如`s:select`、`s:if`、`s:iterator`和`s:checkbox...

    struts2中文学习文档

    这些特性后来都被融入到了Struts2中,使得Struts2不仅继承了WebWork的优点,还在此基础上进行了改进和扩展,成为了更加强大和灵活的框架。 ### Struts2的关键特性 1. **拦截器机制**:这是Struts2的核心概念之一,...

    struts2 ognl的用法

    在Struts2中使用OGNL表达式主要涉及以下几种符号:“#”、“%”和“$”。 ##### 1. “#”符号的使用 - **访问Struts2上下文**: - `#`可用于访问当前的`ActionContext`,如`#ActionContext.getContext()`。 - ...

    Struts2视频教程

    - **适用范围**:Struts2广泛应用于企业级Java Web项目的开发中,特别是那些需要处理大量用户交互和数据展示的应用。 #### 二、Struts2入门案例 - **Hello Struts2**:通过创建一个简单的“Hello World”示例,...

Global site tag (gtag.js) - Google Analytics