一.#符号的用途一般有三种。

“#”主要有三种用途:

1. 访问OGNL上下文和Action上下文,#相当于ActionContext.getContext();下表有几个ActionContext中有用的属性:

parameters 包含当前HTTP请求参数的Map #parameters.id[0]作用相当于request.getParameter ("id")

request 包含当前HttpServletRequest的属性(attribute)的Map #request.userName相当于request.getAttribute("userName")

session 包含当前HttpSession的属性(attribute)的Map #session.userName相当于session.getAttribute("userName")

application 包含当前应用的ServletContext的属性(attribute)的Map #application.userName相当于application.getAttribute("userName")

attr 用于按request > session > application顺序访问其属性(attribute) #attr.userName相当于按顺序在以上三个范围(scope)内读取userName属性,直到找到为止

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

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

二.%符号

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

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

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

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

三.$符号

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

在国际化资源文件中,引用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>

</validators>

2、动态的结果集(dynamic result)

<struts>

<constant name="struts.devMode" value="true" />

<package name="user" namespace="/user" extends="struts-default">

<action name="user" class="com.bjsxt.struts2.user.action.UserAction">

<result>${r}</result>

</action>

</package>

</struts>

注:${}:作用是用于在配置文件中从Value stack(值栈)中取值。

例如:${r} 表示从Value stack(值栈)中取rAction的(成员属性)的值。注意这个成员属性必需存在

注:此处的${}不是el表达式。

get/set方法。

Action类中指定了r的值。这样就动态确定了Result的值

public class UserAction extends ActionSupport {

private int type;

private String r;

public String getR() {

return r;

}

public void setR(String r) {

this.r = r;

}

public int getType() {

return type;

}

public void setType(int type) {

this.type = type;

}

@Override

public String execute() throws Exception {

if(type == 1) r="/user_success.jsp";

else if (type == 2) r="/user_error.jsp";

return "success";

}

}

四、@符号

package com. wjt276.struts2.ognl;

public class S {

public static String STR = "STATIC STRING";

public static String s() {

return "static method";

}

}

<li>访问静态方法:<s:property value="@com.wjt276.struts2.ognl.S@s()"/></li>

<li>访问静态属性:<s:property value="@com.wjt276.struts2.ognl.S@STR"/></li>

<li>访问Math类的静态方法:<s:property value="@@max(2,3)" /></li> // 两个@符号

小结:

$ # % @

a) $ 用于i18n和Struts配置文件

b) # 取得ActionContext的值

c) % 将原本的文本属性解析为ognl,对于本来就是ognl的属性不起作用

d) @ 用于静态方法或属性的调用

Struts2 中#、@、%和$符号的用途的更多相关文章

  1. struts2中使用ognl表达式时各种符号的使用规则$,#,%

    OGNL表达式struts2标签“%,#,$” 一.什么是OGNL,有什么特点? OGNL(Object-Graph Navigation Language),大概可以理解为:对象图形化导航语言.是一 ...

  2. 利用struts2上传文件时,如果文件名中含有-符号,那么会出错

    利用struts2上传文件时,如果文件名中含有-符号,那么会出错 报错如下: HTTP Status 500 - C:\Program Files\Apache Software Foundation ...

  3. Struts2中的Ognl

    OGNL(Object-Graph Navigation Language)全称为对象图导航语言,是一种功能强大的表达式语言,它通过简单一致的语法,可以任意存取对象的属性或者调用对象的方法,能够遍历整 ...

  4. struts2中的OGNL详解

    先了解一下OGNL的概念 OGNL的全名称Object Graph Navigation Language.全称为对象图导航语言,是一种表达式语言.使用这种表达式语言,你可以通过某种表达式语法,存取J ...

  5. struts2中的标签“# ”,“%{ }”,“%{# }”

    理解值栈(ValueStack)与上下文(StackContext):            Struts2中有值堆栈和堆栈上下文的概念,你用 <s:debug />可以看出. 值栈中的对 ...

  6. 浅析Struts2中的OGNL和ValueStack

    要了解Struts2与OGNL表达式的关系,我们必须先搞清楚以下三个概念: 1.  ActionContext它是Action运行的上下文环境,Action的多项设置都存放在次,我们每一次Action ...

  7. Struts2中的OGNL详解 《转》

    首先了解下OGNL的概念: OGNL是Object-Graph Navigation Language的缩写,全称为对象图导航语言,是一种功能强大的表达式语言,它通过简单一致的语法,可以任意存取对象的 ...

  8. [转]STRUTS2中的OGNL

    OGNL表达式是(Object-Graph Navigation Language)是对象图形化导航语言.OGNL是一个开源的项目,struts2中默认使用OGNL表达式语言来显示数据.与serlve ...

  9. struts2中各种值栈问题

    struts2中OGNL和 ValueStack(一) 收藏 学习的时候,总分不清楚在struts2中页面的传值和取值是怎么来完成的,所以从网上搜了很多资料,现在把这些资料总结写,留着以后参考..看完 ...

随机推荐

  1. recv函数的MSG_PEEK标志介绍

    考虑下面的场景,server向client发送数据"_META_DATA_\r\n_USER_DATA_",要求"\r\n"之前的数据_META_DATA_在第 ...

  2. POJ-1681

    Painter's Problem Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 4839   Accepted: 2350 ...

  3. python调用.so

    python调用动态链接库的基本过程 动态链接库在Windows中为.dll文件,在linux中为.so文件.以linux平台为例说明python调用.so文件的使用方法. 本例中默认读者已经掌握动态 ...

  4. 史上最全的web前端系统学习教程!

    这份资料整理花了近7天,如果感觉有用,可以分享给更有需要的人. 在看接下的介绍前,我先说一下整理这份资料的初衷: 我的初衷是想帮助在这个行业发展的朋友和童鞋们,在论坛博客等地方少花些时间找资料,把有限 ...

  5. msyql安装

    1.安装msyql yum install -y ncurses-devel automake autoconf bison libtool-ltdl-devel cd /soft wget http ...

  6. React Native学习

    学习 首先,假使你已经安装了Nodejs 6,也有使用npm进行Nodejs的包管理 npm install -g react-native-cli 也可以使用yarn作为包管理工具 npm inst ...

  7. oracle 自己改了 spfile 导致起不来

    oracle pfile 出错 今天在升级 oracle 内存的时候参数调错了,导致 oracle 起不来, 情急之下用 vim 修改了 spfile 文件,结果由于该文件是二进制的,不能直接修改,所 ...

  8. mysql 允许远程IP连接, 并查看所有用户的所有权限

    添加mysql用户 http://my.oschina.net/u/1179414/blog/202377 允许远程ip连接 GRANT select,insert,update,delete ON ...

  9. [mysql] 删除唯一约束unique

    alter table ot_document drop index title

  10. 88. Merge Sorted Array【Easy】【双指针-不用额外空间归并两个有序数组】

    Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. Note: T ...