欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

struts2中#,@,%,$

程序员文章站 2022-05-28 16:53:35
...

1 struts2中符号介绍

1.1 #符号

#符号的用途一般有三种:

1.1.1 访问OGNL上下文和Action上下文

访问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属性,直到找到为止

1.1.2 过滤和投影集合

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

1.1.3 构造map

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

1.2 %符号

%符号的用途是在标志的属性为字符串类型时,转换为计算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']}” />

1.3 $符号

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

1.3.1 引用OGNL

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

1.3.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(值栈)中取Action的(成员属性)的值。注意这个成员属性必需存在
注:此处的${}不是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";
}
}

1.4 @符号

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="@[email protected]()"/></li>
  • <li>访问静态属性:<s:property value="@[email protected]"/></li>
  • <li>访问Math类的静态方法:<s:property value="@@max(2,3)" /></li>// 两个@符号

1.5 小结

struts2各个符号总结

  • $ 用于i18nStruts配置文件
  • #取得ActionContext的值
  • % 将原本的文本属性解析为ognl,对于本来就是ognl的属性不起作用
  • @用于静态方法或属性的调用
相关标签: struts2 struts