struts2 二

本文详细介绍了 Struts2 中各种处理结果类型的作用与使用场景,并深入探讨了 OGNL 的语法及其在 Struts2 中的应用方式,包括如何利用 OGNL 实现动态页面跳转。


   一 , struts2 的处理结果类型
   
   
   
   chain                用来处理Action链的结果类型
   
   chart                用来处理jfreeChart图标的结果类型,
   
   dispatcher           用来转向页面,通常处理jsp,html页面的结果类型,是struts2的默认结果类型
   
   freemaker            用来处理freemaker的结果类型
   
   httpheader           用来控制特征http行为的结果类型
   
   jasper               用来处理jasperReports报表的结果类型
   
   jsf                  处理jsf的结果
   
   redirect             用来直接跳转到某个url的结果类型
   
   redirectAction       用来直接跳转到某个Action类型
   
   stream               用来向浏览器发生InputStream对象,通常用来处理文件下载,还可以用于返回Ajax数据
   
   titles              用来与titles框架整合的结果类型
   
   velocity           处理velocity模板
   
   xslt               处理xml/xlst模板结果类型
   
   plaintext          用来显示原始文件内容,文件源代码
   
   
   
   
   
   二 , 定义全局 result  ,对全局都有效,局部只对当前Aciton有效
   
   
   <global-results>
   
   <result name="exception">/exception.jsp</result> 
    
    全局 result  ,局部在跳转时可以带参数,参数名为actionName,值为viewCart
   <result name="toViewCart" type="redirect-action">
   
   <param name="actionName">viewCart</param>
   
   </result> 
   </global-results>
   
   
   
   <action name="login" class="com.xiu.LoginAction" method="login">
          
       物理视图使用OGNL表达式进行动态表示, targetUrl是当前Action实例中的一个属性
     <result name="target">${targetUrl}</result>
   </action>
   
   
   
   
   三,   OGNL(Object Graphic Navigation Language 对象图导航语言) 
   
        OGNL是一种强大的EL表达式语言,
   
        struts2将ActionContext 设置为OGNL中的上下文, 值栈valueStack则是OGNL上下文中的根元素,这样一来就可以通过OGNL表达式从
           值栈ValueStack 中自上至下的读取对象或者对象的属性 ,
   
       如果值栈中person与dog 两个对象均包含name属性,当我们读取name属性时,首先会返回栈顶person对象的name属性,
      
           这是由堆栈数据结构的特性所决定的。
           
           在OGNL表达式语言中,访问根元素(如值栈valueStack)中的对象或者属性时可直接使用${属性名}的方式,
           值得注意的是,struts2创建的业务控制器Action实例是保存在valueStack中的,因此 Action的属性同样
           可以直接访问,
         ${loginName}   //读取valueStack中的 loginName属性
           
           
           
           其实,ActionContext中还有几个与valuestack无关,且常用的命名对象,如 parameters,request,session,application,attr,
           
           在访问时加上#号
           
           #parameters['p'] 或者#parameters.p  等同于request.getParameter("p");
           #request['p'] 或者#request.p  等同于request.getAttribute("p");
           #session['p'] 或者#session.p  等同于session.getAttribute("p");
           #application['p'] 或者#application.p  等同于application.getAttribute("p");
           
           
           
          
          
       四,  ActionContext与ValueStack的关系

       



     

      五,OGNL的用法如下


     ${loginName}              //读取valueStack中的 loginName属性
     
     #属性名,                  #parameters['p'] 或者#parameters.p  等同于request.getParameter("p");
                                #request['p'] 或者#request.p  等同于request.getAttribute("p");
                                #session['p'] 或者#session.p  等同于session.getAttribute("p");
                                #application['p'] 或者#application.p  等同于application.getAttribute("p");
                                
                                
                                
                                
                                
     %                          当标签的属性为字符串时,计算OGNL表达式的值 <s:set name="label" value="%{getText('label-rownum)}"/>
     
     
     
    {元素1,元素2,元素3}        定义一个拥有n个元素的list对象,如{'green','red','blue'}
    
    
    #{'key1':'value1','key2':'value2'}    定义拥有n个元素的map对象, #{'menu1':'a','menu2':'2'}
    
    @类全名@静态属性名                       @com.xiu.LoginAction@SUCCESS
    
    @类全名@静态方法                         @com.xiu.LoginAction@isLogin()
    
    集合对象(元素的公共属性名)               userList.{username} 取得所有用户的的姓名列表
    
    #this                                    当前对象的引用, 等于this
    
    ?选择符                                  选择满足条件的所有元素  userList{?#this.age>18} 将选择所有年龄大于18岁的用户
    
    ^  选择符                                选择满足条件的第一个元素, userList{^#this.age>18}    将选择年龄大于18岁的第一个用户
    
    $选择符                                   选择满足条件的最后一个元素, userList{$#this.age>18}    将选择年龄大于18岁的最后一个用户

           
   
   
    六, struts的异常处理
    
     异常分为全局异常和局部异常
     
     1.将exception-mapping放置在global-exception-mappings元素中时,表示全局异常,全局异常将对所有Action有效
     
     2.将exception-mapping放置在action中时表示局部异常只对当前action有效
     
     定义为全局result
     <global-results>
     
     <result name="exception">/exception.jsp</result>
     </global-results>
     
      定义为全局异常
      <global-exception-mappings>
      
      <exception-mapping exception="java.lang.Exception" result="exception"/>
      
      </global-exception-mappings>
           
           
           在页面中使用<s:property value="exception.message"/>
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值