当前位置: 首页 > news >正文

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

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

 

“#”主要有三种用途:

 

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) @ 用于静态方法或属性的调用

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

相关文章:

  • 项目中常用的几个JS
  • 【uva 658】It's not a Bug, it's a Feature!(图论--Dijkstra或spfa算法+二进制表示+类“隐式图搜索”)...
  • 一个CU的嵌入式BLOG地址
  • React系列之 Redux 架构模式
  • 新Delphi隐藏当前进程
  • [转]iSCSI完全指南
  • 倒计时
  • 11g RAC日志体系(cluster,database,asm,scan日志,ADRCI工具的使用)
  • 管理软件更需要Open Social
  • Android--带你一点点封装项目 MVP+BaseActivity+Retrofit+Dagger+RxJava(一)
  • Unity Application Block 发布
  • 桌面管理系统
  • Javascript 刷新框架及页面的方法总集
  • 冒泡排序及改进
  • .Net通用分页类(存储过程分页版,可以选择页码的显示样式,且有中英选择)
  • co.js - 让异步代码同步化
  • CSS相对定位
  • iOS编译提示和导航提示
  • Javascript 原型链
  • php的插入排序,通过双层for循环
  • SQLServer之索引简介
  • Zepto.js源码学习之二
  • 跨域
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 山寨一个 Promise
  • 使用docker-compose进行多节点部署
  • ​iOS安全加固方法及实现
  • #laravel 通过手动安装依赖PHPExcel#
  • (11)MSP430F5529 定时器B
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (Matlab)使用竞争神经网络实现数据聚类
  • (ZT)薛涌:谈贫说富
  • (附源码)springboot炼糖厂地磅全自动控制系统 毕业设计 341357
  • (附源码)计算机毕业设计SSM基于健身房管理系统
  • (十五)使用Nexus创建Maven私服
  • (四)模仿学习-完成后台管理页面查询
  • (五)网络优化与超参数选择--九五小庞
  • (转)拼包函数及网络封包的异常处理(含代码)
  • .apk文件,IIS不支持下载解决
  • .gitignore
  • .NET 中小心嵌套等待的 Task,它可能会耗尽你线程池的现有资源,出现类似死锁的情况
  • .net程序集学习心得
  • .net图片验证码生成、点击刷新及验证输入是否正确
  • :中兴通讯为何成功
  • @AutoConfigurationPackage的使用
  • @column注解_MyBatis注解开发 -MyBatis(15)
  • [ Linux Audio 篇 ] 音频开发入门基础知识
  • [20170705]lsnrctl status LISTENER_SCAN1
  • [Asp.net MVC]Asp.net MVC5系列——Razor语法
  • [C# 开发技巧]如何使不符合要求的元素等于离它最近的一个元素
  • [C/C++] -- 二叉树
  • [C/C++]关于C++11中的std::move和std::forward
  • [C++] cout、wcout无法正常输出中文字符问题的深入调查(1):各种编译器测试
  • [C++]类和对象【下】