注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

拥有自己的梦想,跟随心的召唤

平凡是福

 
 
 

日志

 
 

Struts2 相关记录  

2015-11-16 15:20:35|  分类: Struts |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
》关于 %、#、$
1. # 的3个用途
  • 访问OGNL上下文和Action上下文
相当于ActionContext.getContext(),ActionContext 中的几个内置属性
#action - 调用 action 的 get 方法,getXXX(),如 #action['foo'] or #action.foo
#parameters - request.getParameter(),如 #request['foo'] or #request.foo
#request - request.getAttribute(),如 #request['foo'] or #request.foo
#session - session attribute, 如 #session['foo'] or #session.foo
#application - ServletContext attributes,如 #application['foo'] or #application.foo
#attr - 如果 PageContext 可用,先从 PageContext 获取,否则按 request/session/application 顺序访问,如 #attr['foo'] or #attr.foo
  • 用于过滤和投影(projection)集合,如books.{?#this.price<100};  
投影(projection):collection.{expression}
过滤(filtering):collection.{symbol expression},symbol 为 ?、^、$
                              ? - 根据表达式的值进行过滤
                              ^ - 获取第一个满足表达式条件的对象
                              $ - 获取最后一个满足表达式条件的对象
在表达式中,通过 #this 关键字获取当前正在迭代的集合中的对象。
过滤与投影之间的差别类似于数据库中的表,过滤是取行的操作,而投影是取列的操作。
注意投影和过滤的结果依然是集合,可以通过 [index] 获取相应索引的元素。
如:
获取集合中最后一个成绩及格的对象的 name 属性:<s:property value="report.{$ #this.grade >= 60}.{name}[0]"/>
获取集合中成绩及格对象的总数:<s:property value="report.{? #this.grade >= 60}.size"/>

2. % - 计算OGNL表达式的值
<s:url value="%{#foobar['foo1']}" />
3. $ 的3个用途
  • 在国际化资源文件中,引用OGNL表达式
  • 在Struts 2配置文件中,引用OGNL表达式
          <result type="redirect">xxx.action?id=${iid}</result>
  • 在jsp页面中,直接输出 jstl 表达式的值
         <span>name=${name}</span>

》访问常数、静态方法
struts2 默认禁用了 ognl 静态成员的访问,需要在配置文件中配置 struts.ognl.allowStaticMethodAccess=true 方可:
<struts>
   <constant name="struts.ognl.allowStaticMethodAccess" value="true" />
</struts>
之后就可以如下方式使用:
@some.package.ClassName@FOO_PROPERTY
@some.package.ClassName@someMethod()
对于内部类,内部类名和所属类之间要用$关键字连接:@some.package.ClassName$InnerClass@someMethod()
如:
输出常数:<s:property value="%{@com.opensymphony.xwork2.Action@SUCCESS}" /> - success
取最大值:<s:property value="%{@java.lang.Math@max(1, 5)}"/> - 5
4写5入到小数点后两位:<s:property value="%{@java.lang.Math@round(12.3456 * 100.0) / 100.0}"/> - 12.35
向上取整:<s:property value="%{@java.lang.Math@round(@java.lang.Math@ceil(8 / 7.0))}"/> - 2
向下取整:<s:property value="%{@java.lang.Math@round(@java.lang.Math@floor(8 / 5.0))}"/> - 1

s:set 设值与取值
<s:set var="abc" value="..." scope="application|session|request|page|action"/>
默认 scope 为 action,即同时设置到 Request 和 ActionContextR。
scope="action" : <s:property value="#abc"/>
scope="page" : <%=pageContext.getAttribute("abc") %>
scope="request" : <s:property value="#request.abc"/>
scope="session" : <s:property value="#session.abc"/>

》金额数字的格式化
在国际化资源文件中配置 format.money={0,number,###,##0.00},然后在 jsp 标签中使用如下标签对 money 属性的值进行格式化输出:
方法1:<s:text name="format.money"><s:param value="money"></s:param></s:text>
方法2: ...%{getText('format.money', {money})}%...
方法3:在 action 中用 java 方法进行格式化
    <s:property value="%{formatMoney(money)}" />
    Action:
    // 格式化数字显示
    public String formatMoney(double s){
        DecimalFormat f= new DecimalFormat("\u00A4##0.00");
        return f.format(s);
     }
 
参考:
Struts2 Action转发的参数配置
  评论这张
 
阅读(399)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017