日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【struts2】名为dispatcher的ResultType

發布時間:2025/3/21 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【struts2】名为dispatcher的ResultType 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  1)基本使用

  名稱為“dispatcher”的ResultType,在struts-default.xml里的配置如下:

<result-type name="dispatcher" class="org.apache.struts2.dispatcher.ServletDispatcherResult" default="true"/>

  通過配置可以看出,它對應的實現類是ServletDispatcherResult。

  如果采用JSP作為視圖的實現技術,那么這個ResultType是最常用的。在這個ResultType的實現中,調用了javax.servlet.RequestDispatcher類的forward方法,也就是說它相當于是對RequestDispatcher的一個再包裝。

  既然是這樣,那么在Servlet中使用RequestDispatcher來進行頁面跳轉的特性,也就自然被“dispatcher”這個ResultType繼承下來了。那么Servlet中的RequestDispatcher,到底有什么特性呢?那就是是通過RequestDispatcher來進行頁面跳轉,將會保持是同一個請求對象。這有什么好處呢?由于是同一個對象,那就意味著有同樣的數據,而請求對象里面數據眾多,在Servlet的request對象里面,典型有如下數據:

  • 參數區(parameter),就是用戶在頁面上填寫并提交的數據
  • Head區,由瀏覽器在發出請求的時候,自動加入到請求包的數據
  • 屬性區(Attribute),由開發人員存儲在屬性區的值,通常是通過request.setAttribute方法、request.getAttribute方法來進行訪問
  • cookie區,由瀏覽器在發出請求的時候,自動把相關的Cookie數據通過request傳遞到服務端

  好處是不是很大?因此這也是使用Struts2來進行web開發中最常使用的ResultType。

  2)特殊用法

  在<result>元素的定義中可以使用Action的execute方法運行之后的數據。怎么做呢?一起來看看示例。或許我們都已經習慣于以下這種簡單的<result>配置:

<result name="toWelcome">/s2impl/welcome.jsp</result>

  里面用于指定jsp位置的字符串都是固定的。如果我們希望這個字符串是活動的,可以根據某些參數值來變化,該怎么做到呢?如果我們在Action中定義一個folder字符串,并在execute中或validate中對它進行賦值,這里我們放到validate中,代碼如下:

package cn.javass.hello.struts2impl.action; import com.opensymphony.xwork2.ActionSupport;public class HelloWorldAction extends ActionSupport { private String account; private String password; private String submitFlag; private String folder; public String execute() throws Exception { this.businessExecute(); return "toWelcome"; } public void validate(){ this.folder = "s2impl"; //放在這里的原因是:validate先與execute執行,如果fieldError里面有值,execute就不執行了if(account==null || account.trim().length()==0){ this.addFieldError("account", this.getText("k1")); } if(password==null || password.trim().length()==0){ this.addFieldError("password", this.getText("k2")); }if(password!=null && !"".equals(password.trim()) && password.trim().length()<6){ this.addFieldError("password", this.getText("k3")); } } /** * 示例方法,表示可以執行業務邏輯處理的方法, */ public void businessExecute(){ System.out.println("用戶輸入的參數為==="+"account="+account+",password="+password+",submitFlag="+submitFlag); }public String getAccount() {return account;}public void setAccount(String account) {this.account = account;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getSubmitFlag() {return submitFlag;}public void setSubmitFlag(String submitFlag) {this.submitFlag = submitFlag;}public String getFolder() {return folder;}public void setFolder(String folder) {this.folder = folder;} } View Code

  那么,在<result>的定義中就可以引用folder這個變量,示例如下:

<package name="helloworld" extends="struts-default"> <action name="helloworldAction" class="cn.javass.hello.struts2impl.action.HelloWorldAction"> <result name="toWelcome" type="dispatcher">/${folder}/welcome.jsp</result> <result name="input">/${folder}/login.jsp</result> </action> </package>

  這樣配置的結果和前面寫死的路徑效果時完全一樣的。仔細觀察一下你會發現,“${folder}”的寫法跟以前在jsp上寫的el表達式類似,而里面的“folder”是跟Action的屬性相對應的。

  3)更完整的配置方式

?  平時我們把result對應的jsp的路徑,直接作為<result>元素中的文本來配置,這是簡化的寫法,實際上對于dispatcher還有兩個參數可以配置,示例如下:

<result name="toWelcome" type="dispatcher"> <param name="location">/s2impl/welcome.jsp</param> <param name="parse">true</param> </result>

  location參數就是咱們平時寫的下一個jsp的位置,而parse參數決定了location是否可以通過使用OGNL來引用參數,默認為true。其實,前面使用${folder}來引用Action的folder屬性的值的例子,就是使用的OGNL來引用參數。

  參考資料:http://www.iteye.com/topic/1124526

轉載于:https://www.cnblogs.com/ningvsban/p/3735025.html

總結

以上是生活随笔為你收集整理的【struts2】名为dispatcher的ResultType的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。