ognl和struts2標籤_個人學習日誌

一、struts2中ognl原理

       Struts2默認的表達式語言 ognl: Object Graph Navigation Language 對象圖導航語言

       1>Struts2 中數據移入、移出時,需要進行類型轉換,此時用ognl進行處理

      

       2>ognl原始上可看做一個 map 鍵值對,其中一個鍵值對爲root對象,在struts2中改造爲值棧(value Stack),

       對於非root對象,稱爲StackContext。

      

       3>在struts2中,vlue Stack 可以存放多個對象,相當於一個棧空間(先入後出),查找從最後放入的頂部開始向下進行

       查找,找到則返回;直到底部沒找到則返回null;

      

       4>struts2 爲 Java內部的數據類型提供了類型轉換器

      

       ·ognl訪問值棧

        Action的實例都放在值棧中 ,所以ognl可以直接訪問 *必須要有setter/getter方法

           ex:<s:property value="user.name"/>

       ·ognl訪問其他StackContext

        request、session、application、page存放在StackContext中,訪問時要加上#

        ex: <s:property value="#request.MSG"/>

   

    二、ognl類型轉換錯誤提示

         1> 啓動StrutsConversionErrorInterceptor攔截器

              攔截器已經包含在defaultStack攔截器棧中

        2> Action要繼承ActionSupport類

              其實是要實現ValidationAware接口

        3> 配置input結果映射

              **一旦發生內部錯誤,都會返回 INPUT

        4> 頁面使用Struts 2表單標籤或<s:fielderror filedName="xxx" />標籤

              Struts 2表單標籤內嵌了輸出錯誤信息功能

              普通HTML標籤需使用<s:fielderror>標籤輸出轉換錯誤

        5> 顯示中文

              1) 在 struts.xml 中配置資源文件基名:

              <constant name="struts.custom.i18n.resources" value="msg"/>

              2) 在 src 下創建 msg.properties 文件

              xwork.default.invalid.fieldvalue=字段“{0}”的值無效

 

       ***針對每個字段不同的提示信息

       1) 對每個 Action 寫一個專有的資源文件,文件名與 Action 同名,且在同一目錄下:

              DoSubmitAction.properties

       2) invalid.fieldValue.user.birthday=提示信息

     

    三、實現自定義的類型轉換器

       1> 繼承 org.apache.struts2.util.StrutsTypeConverter 抽象類重寫

           public Object convertFromString(Map arg0, String[] values, Class clz);

           public String convertToString(Map arg0, Object loc);

       2> 配置

           在src目錄創建xwork-conversion.properties

           添加:轉換類全名=類型轉換器類全名

    四、struts2標籤 (舉出個人認爲一些常用的實例用法)

       ·struts標籤一般結合ognl使用 ,常用標籤:通用標籤(數據標籤、控制標籤)、UI標籤、Ajax標籤

           首先在jsp頁面上使用Strtuts標籤是要加入:<%@taglib prefix="s" uri="/struts-tags"%>

         --數據標籤

           <s:set name="fruits" value="{'蘋果', '香蕉', '梨'}"></s:set>

           <s:set name="countrys" value="#{'cn' : 'China', 'us' : 'America', 'uk' : 'British'}"></s:set>

           可用來建立list、map

          

           <s:property value="#fruits[1]" /><br />

           <s:property value="#countrys.cn" />

           訪問建立的list、map

          

           <s:property value="@java.lang.Math@floor(3.1)" />調用靜態方法

           **需在struts.xml中設置 <constant name="struts.ognl.allowStaticMethodAccess" value="true" />

          

           <s:url value="http://www.sohu.com" var="sohu"  >

              <s:param name="age" >18</s:param>

              <s:param name="uname" >z3</s:param>      

           </s:url>

           設置url地址並傳參 <s:a href="%{#sohu}">搜狐新聞</s:a>

           

            <s:include value=""></s:include>

                     把其他頁面包含進來,相當於<jsp:include>

           

            <s:date name="被格式化的值必須填寫" format="yyyy-MM-dd"/>指定格式日期輸出

            <s:property value="'<hr />'" escapeHtml="true" /> 是否轉義

            <s:debug /> 用來觀察值棧和StackContext的內容

           

          --控制標籤

            <s:if test=""></s:if><s:elseif test=""></s:elseif><s:else></s:else>

            等於if(){}else if(){} else{}

            

           <s:iterator value="" status="">

              <s:property/>

           </s:iterator>  迭代器

          

          

         --UI標籤 (struts2內建主題:simple、xhtml、css_xhtml、ajax)

           <s:textfield name="" value="" maxlength="最大長度" readonly=""></s:textfield> 單行文本框

           <s:textarea name="" value="" cols="列數" rows="行數" readonly="" ></s:textarea>  多行文本框

           <s:submit></s:submit> 提交按鈕

             

           <s:select list=""></s:select> 下拉菜單

          

           <s:form name="f">**需聲明表單別名

           <s:doubleselect formName="f" list="" doubleList="" doubleName=""></s:doubleselect> 二級級聯下拉框

           </s:form>

          

           ***注意:在填寫value值時,如果在可能引起歧義的情況下(如name,name不知是String "name" 還是 變量 name時) struts2優先將內容識別爲String,想讓他識別爲變量要加%:%變量名。但在 <s:property value="name" />中除外,優先識別爲變量名如果想讓他識別爲字符串:<s:property value="'name'" />

發佈了10 篇原創文章 · 獲贊 6 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章