ognl表达式中的#%$的作用



1.#号
1.通过#可以获取到Map中的数据
这时的#就代表了ActionContext对象.也就是相当于ActionContext.getContext();

2.不写#默认是在root中查找

3.进行投影映射
可以使用struts2提供的一个标签<s:iterator> 它的用法与<c:forEach>差不多.

<s:iterator value="ps" var="p">  注意:p不是存储在root中,而是存储在context中
<s:property value="#p.name"> //在这里使用时,要在p前加#
</s:iterator>

(下面内容了解)
  1)集合的投影(只输出部分属性
  <h1>遍历集合只要name属性</h1>
<s:iterator value="products.{name}" var="pname"> 
<s:property value="#pname"/>
</s:iterator>
  2)遍历时,对数据设置条件 
<h1>遍历集合只要price大于1500商品</h1>
<s:iterator value="products.{?#this.price>1500}" var="product"> 
<s:property value="#product.name"/> --- <s:property value="#product.price"/>
</s:iterator>
  3)综合
  <h1>只显示价格大于1500 商品名称</h1>
<s:iterator value="products.{?#this.price>1500}.{name}" var="pname"> 
<s:property value="#pname"/>
</s:iterator>   
2.关于在页面上直接构建集合
1.构建List集合
<br>
<s:iterator value="{1,2,3,4}" var="num">
<s:property value="#num" />
</s:iterator>


<hr>
2.构建一个Map集合<br>
<s:iterator value="#{'name':'tom','price':'100'}" var="entry">
<s:property value="#entry.key" />  ----<s:property
value="#entry.value" />
<br>
</s:iterator>


3.关于%使用
%作用是用于标识当前表达式是否被ognl解析器解析.

用法一: 结合struts2 表单表单使用, 通过%通知struts, %{}中内容是一个OGNL表达式,进行解析 
  <s:textfield name="username" value="%{#request.username}"/>
  用法二: 设置ognl表达式不解析 %{'ognl表达式'}
  <s:property value="%{'#request.username'}"/>



4.$用法

1.可以在struts.xml配置文件中使用.
例如:文件下载时
<param name="contentType">${contentType}</param>

2.可以在国际化文件中使用
在properties文件 msg=欢迎您, ${#request.username}
在页面
<s:i18n name="messages">
<s:text name="msg"></s:text>
</s:i18n>
* 自动将值栈的username 结合国际化配置信息显示 


3.可以在校验文件中使用
<field name="password">
<field-validator type="stringlength">
<param name="maxLength">10</param>
<param name="minLength">6</param>
<message>密码长度必须在${minLength}-${maxLength}位间</message>
</field-validator>
</field>
结论: #用于写ognl表达式获取数据,% 控制ognl表达式是否解析 ,$ 用于配置文件获取值栈的数据

你可能感兴趣的:(ognl表达式中的#%$的作用)