转自:https://www.cnblogs.com/sharpest/p/6030265.html

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

“#”主要有三种用途:

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的(成员属性)的值。注意这个成员属性必需存在

get/set方法。(注:此处的${}不是el表达式。)

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之配置文件struts.xml

    在默认情况下,Struts2只自动加载类加载路径下的struts.xml.default-struts.xml和struts-plugin.xml三类文件.但是随着应用规模的增大,系统中Action数 ...

  2. struts2默认配置文件 struts-default.xml

    注:用的struts2的版本是2.1.6 strtus2的默认配置文件 struts-default.xml ,其中的默认的拦截器,包括其中的拦截器栈. 因为struts2的配置文件struts.xm ...

  3. 六、Struts2的配置文件

    六.Struts2的配置文件 1.default.properties:在struts2-core-**.jar的org.apache.struts包中 关于Struts2一些常量配置(框架内部) s ...

  4. (转)struts2.0配置文件、常量配置详解

    一.配置: 在struts2中配置常量的方式有三种: 在struts.xml文件中配置 在web.xml文件中配置 在sturts.propreties文件中配置 1.之所以使用struts.prop ...

  5. struts2的配置文件

    struts2的配置文件 1.配置Action的struts.xml 2.配置Struts2有关属性的struts.properties

  6. struts2在配置文件与JSP中用OGNL获取Action属性

    参考:Struts与OGNL结合 struts2在配置文件中可以调用Action的属性,在JSP页面也可以取出Action的属性值(前提是属性有get,set方法). 第一个例子: 1.Action中 ...

  7. Struts2的配置文件中, <package>的作用,<action><result>重名?

    问:Struts2的配置文件中, <package>的作用是什么? 答:防止action重名啊,例如前台和后台,总会有很多地方起名重复的! 问:可是访问的时候,不也是访问action吗,能 ...

  8. Struts2 资源配置文件国际化

    Struts2 资源配置文件国际化 Struts2资源文件的命名规范:basename_language_country.properties Struts2国际化如果系统同时存在资源文件.类文件,系 ...

  9. Struts2 中#、@、%和$符号的用途

    一.#符号的用途一般有三种. “#”主要有三种用途: 1. 访问OGNL上下文和Action上下文,#相当于ActionContext.getContext():下表有几个ActionContext中 ...

随机推荐

  1. Mysql 中 trim 的用法

    需求:去掉contract字段值中的% update gsfrankfurt set contract = trim(both "%" from contract);

  2. excel 的几个函数使用

    =IF(表1[[#此行],[state]]="修改",        IF(                ISBLANK(                    VLOOKUP( ...

  3. HTML5学习笔记1 HTML5 新元素

    自1999年以后html4.0已经改变了很我,今天,在html4.01中的几个已经被废弃,这些元素在html5中已经被删除或重新定义. 为了更好地处理今天的互联网应用,html5添加了很多新元素及功能 ...

  4. python之版本管理

    linux 环境下怎样对不同的python环境进行 方便的切换呢?update-alternatives工具能够非常方便的帮我们完成这个任务.而windows环境下可通过anaconda来完成. 1. ...

  5. Makefile 之 $(Q)

    # To put more focus on warnings, be less verbose as default # Use 'make V=1' to see the full command ...

  6. Linux下出现Read-only file system的解决办法

    正常运行中的网站,忽然间出现session目录不可写,连接服务器一看,任何关于写硬盘的命令都不能用,提示Read-only file system,使用一条命令即可搞定此问题: mount -o re ...

  7. 小案例:struts1.3利用nested标签使用POJO

    其中的关键就是这个POJO是你自己去new一个,struts是不会帮你创建的!参考http://luohua.iteye.com/blog/39976 表单页 <%@ page language ...

  8. bcrypt install `node-pre-gyp install --fallback-to-build`

    npm安装parse-server的过程中遇到了2次错误 尝试1 ganiks@ganiks-ubuntu-trusty-64:~$ sudo npm i -g parse-server npm WA ...

  9. CRM认识的误区

    众所周知,CRM,就是平时说的“客户关系管理”,指用CRM来管理 企业与客户之间的关系.纵观整个IT圈子,做CRM的厂商比比皆是,每个厂商都有自己的产品宣言,令人眼花缭乱.但是领很多老板们不解的是,我 ...

  10. nginx调用php-fpm出错解决方法和nginx配置详解

    装完了nginx和php-5.5,配置好了nginx调用php后,就开始启动php-fpm. 使用下面的命令 复制代码 代码如下: /usr/local/php/sbin/php-fpm 就可以启动了 ...