20090326工作日志

1.Struts2 ognl中的#,%和$符号用法详解
OGNL(Object-Graph Navigation Language),可以方便地操作对象属性的开源表达式语言;
#、%和$符号在OGNL表达式中经常出现,而这三种符号也是开发者不容易掌握和理解的部分。在这里笔者简单介绍它们的相应用途。

1.#符号的用途一般有三种。
   1)访问非根对象属性,例如示例中的#session.msg表达式,由于Struts 2中值栈被视为根对象,所以访问其他非根对象时,需要加#前缀。实际上,#相当于

ActionContext. getContext();#session.msg表达式相当于ActionContext.getContext().getSession(). getAttribute(”msg”) 。

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

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

2.%符号
%符号的用途是在标志的属性为字符串类型时,计算OGNL表达式的值。如下面的代码所示:
构造Map

<s:set name=”foobar” value=”#{’foo1′:’bar1′, ‘foo2′:’bar2′}” />

<p>The value of key “foo1″ is <s:property value=”#foobar['foo1']” /></p>

<p>不使用%:<s:url value=”#foobar['foo1']” /></p>

<p>使用%:<s:url value=”%{#foobar['foo1']}” /></p>



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

   在国际化资源文件中,引用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.struts2中的中文问题
乱码多数是由于编码与解码所使用的方式不同造成的,所以我建议大家将编码方式都设为“utf-8”,如<%@   page language="java" contentType="text/html;

charset=utf-8" pageEncoding="utf-8" %>。另外,在配置web.xml时使用ActionContextCleanUp过滤器(Filter),如下面代码web.xml所示:

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_9" version="2.4"
     xmlns="http://java.sun.com/xml/ns/j2ee"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

     <display-name>Struts 2 OGNL</display-name>
    
     <filter>
         <filter-name>struts-cleanup</filter-name>
         <filter-class>
             org.apache.struts2.dispatcher.ActionContextCleanUp
         </filter-class>
     </filter>
    
     <filter-mapping>
         <filter-name>struts-cleanup</filter-name>
         <url-pattern>/*</url-pattern>
     </filter-mapping>
   
     <filter>
         <filter-name>struts2</filter-name>
         <filter-class>
             org.apache.struts2.dispatcher.FilterDispatcher
         </filter-class>
     </filter>

     <filter-mapping>
         <filter-name>struts2</filter-name>
         <url-pattern>/*</url-pattern>
     </filter-mapping>

     <welcome-file-list>
         <welcome-file>index.html</welcome-file>
     </welcome-file-list>

</web-app>

 3.在使用struts2的标签时,s:form的action属性值直接赋为struts.xml里面对应的action的name就行了。
当我们不是在页面用struts2自带的标签时,form 的action就不是像上面的了。应该写成“/你的项目名/action名字.action”才行.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值