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

阅读更多

Struts2 中#、%和$符号的用途(转载)

 

#、%和$符号在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

The value of key “foo1″ is

不使用%:

使用%:

 

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

   在国际化资源文件中,引用OGNL表达式,例如国际化资源文件中的代码:reg.agerange=国际化资源信息:年龄必须在${min}同${max}之间。

    在Struts 2框架的配置文件中引用OGNL表达式,例如下面的代码片断所示:

   

           

            10

            100

            BAction-test校验:数字必须为${min}为${max}之间!

       

   

****************************************************************

看了这个之后就试了改为value ="%{#session.username}" 奇怪它就真的成功了~~哈哈~

 

     访问值栈中Action的普通属性:userName -->

     访问值栈中Action的对象的普通属性:user.userName | user['userName'] | user[\"userName\"] --> | |

     访问值栈中Action的对象的普通属性:user.firend.userName -->

     访问值栈中Action的普通方法:test() -->

     访问值栈中Action的属性的普通方法:userName.length() -->

     访问值栈中Action的对象的普通方法:user.hello() -->

 

随着注解越来越普遍的使用,struts2也开始支持注解,并宣称支持0配置(XML配置文件),我最近在使用Struts2框架,也顺便了解一了一下Struts2的注解配置.

      1.在Web.xml配置文件中添加

 
struts2 
         
                   org.apache.struts2.dispatcher.FilterDispatcher 
        
 
     
        actionPackages 
        com.learn.action 
    
 

        这样sturts2框架会自动扫描action包中的命名为*Action或者集成ActionSupport的类,例如一个类命名为SearchAction,那么Struts2框架会自动扫描它,认为它为一个Action类,并且将所有search.action的请求都转发给该类进行处理,这时我们又遇到了一个问题,如果这个Action是多Method的Action那么我们又该怎么办呢?因为不能像在XML中那样配置Method属性,这时我们可以在请求是加上!MethodName以请求特定的Method即可,例如想要请求SearchAction的search方法,我们可以直接这样请求:search!search.action.

       以上讲到的是Struts2框架如何找到没有在XML中定义的Action,并且怎么样将请求转发给适当的Action来进行处理.

       我们都知道在XML中可以定义Action处理完以后的跳转,同样利用Annotation也可以做到这一点:

        2.Resules的Annotation定义

        我们只需要在Action Class的类的前面加上@Result即可以定义Action的跳转

        例如:

 

@Results({ 
   @Result(name="input" value="/input.jsp" type=NullResult.class), 
   @Reuslt(name="success" value="/success.jsp" type=NullResult.class), 
   @Result(name="error" value="/error.jsp" type=NullResult.class) 
})
        上面是一个典型的多Result配置,name属性指定返回的字符串,value指定要跳转的页面,type指定Result的类型,type是一个很重要的属性,他有一下几种情况:

        1)NullResult : 默认的可以省略

        2)ActionChainResult : 用于从一个Action跳转到另外一个Action

        例如:

 

@Result 
(name = "search",value= "search",type=ActionChainResult.class, 
params={"method","search"})
        这个配置是如果返回值为"search"就跳转掉SearchAction的search方法,如果不指定params就跳转到SearchAction的execute方法

        3)StreamResult:用于文件下载

        例如:

 

@Result 
(name="success",value="inputStream",type=StreamResult.class, 
params={"bufferSize",FileConstant.DOWNLOAD_BUFFER_SIZE})
        作为Struts2的Annotation配置中最重要的Result配置大致有这几种情况,关于Struts2 Annotation的其他配置我也不是十分了解,就以后在介绍吧!!!

 

你可能感兴趣的:(框架,Struts,JSP,XML,Apache)