国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
struts 2 配置方法及其技巧實例整理(二)
  Struts標簽

通用標簽:

property

//property訪問普通屬性,自動識別人ognl表達式

<li>property: <s:property val="username"/> </li>

       <li>property 取值為字符串: <s:property val="'username'"/> </li>

       <li>property 設定默認值: <s:property val="admin" default="管理員"/> </li>

       <li>property 設定HTML: <s:property val="'<hr/>'" escape="false"/> </li>

       <hr />

set

       <li>set 設定adminName值(默認為reqst 和 ActionContext): <s:set var="adminName" val="username" /></li>   

       <li>set 從reqst取值: <s:property val="#reqst.adminName" /></li>

       <li>set 從ActionContext取值: <s:property val="#adminName" /></li>   

       <%--<li>set 設定范圍: <s:set name="adminPassword" val="password" scope="page"/></li>

       <li>set 從相應范圍取值: <%=pageContext.getAttribute("adminPassword") %></li>

       --%>

       <li>set 設定var,范圍為ActionContext: <s:set var="adminPassword" val="password" scope="session"/></li>

       <li>set 使用#取值: <s:property val="#adminPassword"/> </li>

       <li>set 從相應范圍取值: <s:property val="#session.adminPassword"/> </li>      

       <hr />      

       <%--<li>push:<s:set name="myDog" val="new com.bjsxt.struts2.ognl.Dog('o y')"></s:set></li>

       <li>

       push:<s:push val="#myDog">

           <s:property val="name"/>

       </s:push>

       </li>

       <li>push: <s:property val="name"/></li>

       --%>     

       <hr />

bean

       <li>bean 定義bean,并使用param來設定新的屬性值:

           <s:bean name="com.bjsxt.struts2.tags.Dog" >

              <s:param name="name" val="'pp'"></s:param>

              <s:property val="name"/>            

           </s:bean>        

       </li>        

       <li>bean 查看debug情況:

           <s:bean name="com.bjsxt.struts2.tags.Dog" var="myDog">

              <s:param name="name" val="'o y'"></s:param>

           </s:bean>

           拿出值:

           <s:property val="#myDog.name"/>         

       </li>

       <hr />      

incl e

       <li>incl e _incl e1.html 包含靜態(tài)英文文件

       <s:incl e val="/_incl e1.html"></s:incl e>

       </li>     

       <li>incl e _incl e2.html 包含靜態(tài)中文文件

       <s:incl e val="/_incl e2.html"></s:incl e>

       </li>     

       <li>incl e _incl e1.html 包含靜態(tài)英文文件,說明%用法

//%{}強制把{}中的內容轉換問ognl表達式

       <s:set var="incPage" val="%{'/_incl e1.html'}" />

       <s:incl e val="%{#incPage}"></s:incl e>

       </li>     

       <hr />

控制標簽

if

       <li>if elseif else:

       age = <s:property val="#parameters.age[0]" /> <br />

       <s:set var="age" val="#parameters.age[0]" />

       <s:if test="#age < 0">wrong age!</s:if>

       <s:elseif test="#parameters.age[0] < 20">too young!</s:elseif>

       <s:else>yeah!</s:else><br />      

       <s:if test="#parameters.aaa == null">null</s:if>

       </li>     

       <hr /> 

iterator

       <li>遍歷集合:<br />

       <s:iterator val="{1, 2, 3}" >

           <s:property/> |

       </s:iterator>

       </li>

       <li>自定義變量:<br />

       <s:iterator val="{'aaa', 'bbb', 'ccc'}" var="x">

           <s:property val="#x.toUpperCase()"/> |

       </s:iterator>

       </li>

       <li>使用status:<br />

       <s:iterator val="{'aaa', 'bbb', 'ccc'}" status="status">

           <s:property/> |

           遍歷過的元素總數(shù):<s:property val="#status.count"/> |

           遍歷過的元素索引:<s:property val="#status.index"/> |

           當前是偶數(shù)?:<s:property val="#status.even"/> |

           當前是奇數(shù)?:<s:property val="#status.odd"/> |

           是第一個元素嗎?:<s:property val="#status.first"/> |

           是最后一個元素嗎?:<s:property val="#status.last"/>

           <br />

       </s:iterator>      

       </li>      

       <li>

       <s:iterator val="#{1:'a', 2:'b', 3:'c'}" >

           <s:property val="key"/> | <s:property val="val"/> <br />

       </s:iterator>

       </li>      

       <li>

       <s:iterator val="#{1:'a', 2:'b', 3:'c'}" var="x">

           <s:property val="#x.key"/> | <s:property val="#x.val"/> <br />

       </s:iterator>

       </li>      

       <li>      

       <s:fielderror fieldName="fielderror.test" theme="simple"></s:fielderror>      

       </li>

UI標簽

在實際運用中使用并不多;

在struts.xml文件中添加屬性:

       設置標簽的主題:simple/css_xhtml/xhtml

    <constant name="struts.ui.theme" val="css_xhtml" /> 

       <li>

       <s:form >

       <div class="formFieldError">

       <s:fielderror />

       </div>

       <s:textfield name='aaa'></s:textfield>

       </s:form>

       </li> 

 

 

兩種action的配置方法:

第一種:

       <action name="*-*" class="com.bjsxt.bbs2009.action.{1}Action" method="{2}">

            <result>/admin/{1}-{2}.jsp</result>

            <result name="input">/admin/{1}-{2}.jsp</result>

       </action>

第二種:可以用動態(tài)方法調用,user!add

       <action name="category" class="com.bjsxt.bbs2009.action.CategoryAction">

            <result>/admin/category_list.jsp</result>

            <result name="add_input">/admin/category_add_input.jsp</result>

            <result name="update_input">/admin/category_update_input.jsp</result>           

       </action> 

 

 

聲明式異常處理

先把異常拋給struts

    p lic List<Category> list() throws SQLException {

              ...

                     } catch (SQLException e) {

                     e.printStackTrace();

                     throw(e);

              }

              ...

       }

在Action中繼續(xù)往上拋

    p lic String list() throws Exception {

       categories = categoryService.list();

       return S?SS;

    }

struts處理

    方法一:在struts.xml文件中配置局部的error處理:

       <action name="*-*" class="com.bjsxt.bbs2009.action.{1}Action" method="{2}">

            <result>/admin/{1}-{2}.jsp</result>

            <result name="input">/admin/{1}-{2}.jsp</result>

            <exception-mapping result="error" exception="java.sql.SQLException" /> 

            <result name="error">/error.jsp</result>

       </action>

    方法二:在struts.xml文件中配置全局的error處理,由action進行處理:

    <package name="bbs2009_default" extends="struts-default">  

       <global-results>

        <result name="error">/error.jsp</result>

    </global-results>   

        <global-exception-mappings>

        <exception-mapping result="error" exception="java.lang.Exception"></exception-mapping>

    </global-exception-mappings>   

    </package>

       繼續(xù)在需要處理error的Action中配置:

       <action name="*-*" class="com.bjsxt.bbs2009.action.{1}Action" method="{2}">

            <result>/admin/{1}-{2}.jsp</result>

            <result name="input">/admin/{1}-{2}.jsp</result>

            <result name="error">/error.jsp</result>

       </action>

       方法三:直接配置全局error,統(tǒng)一處理錯誤信息:

    <package name="bbs2009_default" extends="struts-default">     

       <global-results>

        <result name="error">/error.jsp</result>

    </global-results>   

        <global-exception-mappings>

        <exception-mapping result="error" exception="java.lang.Exception"></exception-mapping>

    </global-exception-mappings>

    </package>

 

 

DefaultActionRef_Bug

    <default-action-ref name="Category_list" />

使用default-action-ref訪問index頁面時,不會方法任何的action

為了解決這個問題,可以定義一個index的action

       <action name="index" class="com.bjsxt.bbs2009.action.CategoryAction" method="list">

            <result>/index.jsp</result>

       </action>

然后再web.xml中設置:

  <welcome-file-list>

    <welcome-file>index</welcome-file>

  </welcome-file-list> 

 

 

I18N

一般使用:

在src目錄下創(chuàng)建:

    app_en_US.properties,app_zh_CN.properties

    在兩個文件中分別寫入:

welcome.msg=hello,sir

welcome.msg=\歡\迎\你\!

    從國際化資源文件中讀取信息:

       ResourceBundle res = ResourceBundle.getBundle("app", Locale.CHINA);

       System.out.println(res.getString("welcome.msg" ));

在Action中使用,需要這樣命名:

    更Action處于同一個包中:

    LoginAction_zh_CN.properties

login.username=\用\戶\名\:

在頁面中使用:

    <s:property val="getText('login.username')"/> <input name="username" />

包級別的國際化文件:

    只能叫package:package_en_US.properties

整個項目一個資源文件:

    隨意命名:

    abc_zh_CN.properties,abc_en_US.properties

    struts.xml文件中配置:

    <constant name="struts.custom.i18n.resources" val="abc"></constant>

處理資源文件中的參數(shù)

    在abc_zh_CN.properties文件中加入:

welcome.msg=\歡\迎\你\:{0}

    在abc_en_US.propertieszhong 加入

welcome.msg=welcome\:{0}

    在頁面中注入?yún)?shù):

    <s:text name="welcome.msg">

       <s:param val="username"></s:param>

    </s:text>

動態(tài)語言切換

URL:.../Login?reqst_locale=en_US

URL:.../Login?reqst_locale=zh_CN 

 

 

攔截器

自定義攔截器:

一、實現(xiàn)import com.opensymphony.xwork2.interceptor.Interceptor接口:

p lic class MyInterceptor implements Interceptor {

 

    p lic void destroy() {

       // TODO Auto-generated method st     

    }

    p lic void init() {

       // TODO Auto-generated method st     

    }

    p lic String intercept(ActionInvocation invocation) throws Exception {

       long start = System.currentTimeMillis();

       String r = invocation.invoke();

       long end = System.currentTimeMillis();

       System.out.println("action time = " + (end - start));

       return r;

    }

}

二、在struts.xml中配置:

       <interceptors>

           <interceptor name="my" class="com.bjsxt.interceptor.MyInterceptor"></interceptor>

       </interceptors>

三、在Action中配置:

       <action name="test" class="com.bjsxt.action.TestAction">

           <result>/test.jsp</result>

           <interceptor-ref name="my"></interceptor-ref>

           <interceptor-ref name="defaultStack"></interceptor-ref>

       </action>

注意:為了還能使用到默認的攔截器:需要重新配置默認的攔截器defaultStack

使用token攔截器控制重復提交:

可以設置提交方式為post防止,也可以使用token攔截器:

       <action name="user" class="com.bjsxt.action.UserAction">

           <result>/addOK.jsp</result>       

           <interceptor-ref name="defaultStack"></interceptor-ref>

           <interceptor-ref name="token"></interceptor-ref>

           <result name="invalid.token">/error.jsp</result>

       </action>

 

 

類型轉換

在struts中使用攔截器實現(xiàn)類型轉換

自定義轉換的日期格式:

    <s:date name="d" format="yyyy/MM/dd HH:mm:ss"/><br/>

在url中傳遞map:

    ...?users[‘a’]=usera&users[‘b’]=userb

    輸出為:{a=usera, b=userb}

在url中傳遞java.awt.Point

    在Action中Point生成不了getter方法

    ...?p.x=2&p.y=3

    解決方法:

編寫自己的轉換器

p lic class MyPointConverter extends StrutsTypeConverter{ 

    @Override

    p lic Object convertFromString(Map context, String[] vals, Class toClass) {     

           Point p = new Point();

           String[] strs = (String[])vals;

           String[] xy = strs[0].split(",");

           p.x = Integer.parseInt(xy[0]);

           p.y = Integer.parseInt(xy[1]);

           return p;

    }

    @Override

    p lic String convertToString(Map context, Object o) {

       // TODO Auto-generated method st

       return o.toString();

    }

}

完成注冊(三種方法):

       ① 局部:XXXAction-conversion.properties

           在TestAction-conversion.properties中加入:                              p=com.bjsxt.converter.MyPointConverter  //p是action中的屬性名   

           url:.../test?p=5.8

       ② 全局:xwork-conversion.properties

           在xwork-conversionlproperties中配置:

java.awt.Point=com.bjsxt.converter.MyPointConverter

       ③ Annotation

    url傳入list時:

       .../test?ps=1,2&ps=1,3    

       .../test?ps[0].x=1&ps[0].y=2& ps[1].x=1&ps[1].y=3    

這時要使用java.awt.Point配置

 

本站僅提供存儲服務,所有內容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
struts2.x深入探索
Struts2學習自我總結
1.namespace、action實現(xiàn)、路徑問題(我的struts2筆記)
Struts2中使用token避免重復提交的方法
SSH 下的 頁面跳轉 攔截
通過struts2攔截器實現(xiàn)權限管理
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服