<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    空間站

    北極心空

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      15 Posts :: 393 Stories :: 160 Comments :: 0 Trackbacks
    http://blog.csdn.net/d8111/archive/2008/09/11/2914079.aspx

    struts2雖然繼承了webwork優秀的MVC分離,可是有很多地方讓人百思不得其解!最讓人離譜的是,返回的結果集中居然沒有String,xml這兩種非常常用的類型。還是自己動手,豐衣足食:

     

    第一種方式:使用“PlainText Result”

     

        先看官方文檔對plain text結果的定義:“A result that send the content out as plain text. Usefull typically when needed to display the raw content of a JSP or Html file for example.”這是一個純扯蛋的說法。。。貌似感覺只能返回jsp頁面似的,最起碼他誤導了我。

     

        其實使用“PlainText Result” ,返回的結果是未進行格式和編碼定義的字符串什么意思?就類似于“FreeMarker Result”  ,返回一個*.ftl格式的模板,你完全可以在*.ftl寫string,那么結果就是string;也可以在里面寫xml,那么結果就是xml。

     

       舉例如下:

    1. <?xml version="1.0" encoding="UTF-8" ?>
    2. <!DOCTYPE struts PUBLIC
    3.         "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    4.         "http://struts.apache.org/dtds/struts-2.0.dtd">
    5. <struts>
    6.     <package name="example" namespace="/example"
    7.         extends="struts-default">
    8.         <action name="outputXml"  method="outxml" class="example.OutputXml">
    9.             <result name="xmlMessage" type="plaintext"></result>
    10.         </action>
    11.     </package>
    12. </struts>

    這里定義了xmlMessage為plain text結果,至于它具體是什么,看下面的Action類:

     

    1. public class OutputXml extends ActionSupport {
    2.     public void outxml() throws Exception {
    3.         HttpServletResponse response = ServletActionContext.getResponse();
    4.         response.setContentType("text/xml ");
    5.         PrintWriter pw = response.getWriter();
    6.         pw.print("<cc>cccccc</cc>");
    7.     }

        在代碼中,我們顯式的給response定義了ContentType。那么返回去的內容"<cc>cccccc</cc>"就會被接收方按xml進行解析。

     而如果需要返回的是String類型,那么contentType = "text/plain”。

    如果進一步需要指明編碼,那么contentType = "text/plain; charset=UTF-8";

     

        到這里理解“plain text的結果是未進行格式和編碼定義的字符串”應該就不困難了。基于http的內容傳輸實際都是字符串型,類型的定義是放在response的contentType 中。

     

     

    第二種方式: 直接擴展struts2的結果集StrutsResultSupport 

     

    代碼如下:

    應該很容易懂了。。嘿嘿

    1. package commons.struts2;
    2. import java.io.PrintWriter;
    3. import javax.servlet.http.HttpServletResponse;
    4. import org.apache.struts2.dispatcher.StrutsResultSupport;
    5. import com.opensymphony.xwork2.ActionInvocation;
    6. /**
    7.  * result type for output string in action
    8.  * 
    9.  * @author songwei,yaolei <b>Example:</b>
    10.  * 
    11.  * <pre>
    12.  * <!-- START SNIPPET: example -->
    13.  * <result name="success" type="string">
    14.  *   <param name="stringName">stringName</param>
    15.  * </result>
    16.  * <!-- END SNIPPET: example -->
    17.  * </pre>
    18.  * 
    19.  */
    20. public class StringResultType extends StrutsResultSupport {
    21.     private static final long serialVersionUID = 1L;
    22.     private String contentTypeName;
    23.     private String stringName = "";
    24.     public StringResultType() {
    25.         super();
    26.     }
    27.     public StringResultType(String location) {
    28.         super(location);
    29.     }
    30.     protected void doExecute(String finalLocation, ActionInvocation invocation)
    31.             throws Exception {
    32.         HttpServletResponse response = (HttpServletResponse) invocation
    33.                 .getInvocationContext().get(HTTP_RESPONSE);
    34.         // String contentType = (String)
    35.         // invocation.getStack().findValue(conditionalParse(contentTypeName,
    36.         // invocation));
    37.         String contentType = conditionalParse(contentTypeName, invocation);
    38.         if (contentType == null) {
    39.             contentType = "text/plain; charset=UTF-8";
    40.         }
    41.         response.setContentType(contentType);
    42.         PrintWriter out = response.getWriter();
    43.         // String result = conditionalParse(stringName, invocation);
    44.         String result = (String) invocation.getStack().findValue(stringName);
    45.         out.println(result);
    46.         out.flush();
    47.         out.close();
    48.     }
    49.     public String getContentTypeName() {
    50.         return contentTypeName;
    51.     }
    52.     public void setContentTypeName(String contentTypeName) {
    53.         this.contentTypeName = contentTypeName;
    54.     }
    55.     public String getStringName() {
    56.         return stringName;
    57.     }
    58.     public void setStringName(String stringName) {
    59.         this.stringName = stringName;
    60.     }
    61. }

     

    使用的方法:

    1.Action

    1. package test;
    2. import com.opensymphony.xwork2.ActionSupport;
    3. public class MyAction extends ActionSupport{
    4.     String  result="abc";
    5.     public String ajax() {
    6.         return "ajaxResponse";
    7.     }
    8.     // getter && setter
    9.     public String getResult() {
    10.         return result;
    11.     }
    12.     public void setResult(String result) {
    13.         this.result = result;
    14.     }
    15.     
    16. }

    2.定義struts.xml

    1. <?xml version="1.0" encoding="UTF-8" ?>
    2. <!DOCTYPE struts PUBLIC
    3.     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    4.     "http://struts.apache.org/dtds/struts-2.0.dtd">
    5. <struts>
    6.     <package name="test" extends="struts-default">
    7.         <result-types>
    8.             <result-type name="string" class="test.StringResultType"></result-type>
    9.         </result-types>
    10.         
    11.         <action name="myAction" class="test.MyAction" >
    12.             <result name="ajaxResponse" type="string">
    13.                 <param name="stringName">result</param>
    14.             </result>
    15.         </action>
    16.     </package>
    17. </struts>

    無非也就是將string結果集進行申明,然后給返回“ajaxResponse”的結果綁定變量名。這里定義返回Action的String  result變量,即“abc”。

     

     

    第三種方式:利用Velocity ResultFreeMarker Result

    類似第一種方式,這里不再重復

    posted on 2008-11-24 12:54 蘆葦 閱讀(3383) 評論(1)  編輯  收藏 所屬分類: Struts

    Feedback

    # Site Promotion 2009-05-18 09:19 Site Promotion
    Good evening. You need only claim the event of your life to make yourself yours. When you truly possess all you have been and done, which may take some time, you are fierce with reality.
    I am from Gabon and learning to read in English, tell me right I wrote the following sentence: "Seo software can help you to acquire targeted traffic interested in your business.Optimize your website get top rankings for."

    Waiting for a reply :o, Ellen.  回復  更多評論
      

    主站蜘蛛池模板: 国产精品色午夜视频免费看| 久久aⅴ免费观看| 免费A级毛片无码久久版| 亚洲人成网站999久久久综合| 久久精品国产免费观看三人同眠| 亚洲av日韩av高潮潮喷无码| 久久99热精品免费观看牛牛| 久久精品国产精品亚洲毛片| 亚洲成av人片天堂网| 一区二区在线免费视频| 国产亚洲精品资在线| 中文字幕av无码不卡免费| 日韩高清免费观看| 久久亚洲精品成人无码| 高清在线亚洲精品国产二区| jizz日本免费| 国产色婷婷精品免费视频| 国产成人亚洲午夜电影| 中文字幕亚洲免费无线观看日本 | 亚洲av无码久久忘忧草| h在线看免费视频网站男男| 中文字幕一精品亚洲无线一区| 亚洲成a∨人片在无码2023 | 免费网站看av片| 亚洲午夜爱爱香蕉片| 国产啪精品视频网站免费尤物| 亚洲一区二区三区首页| 女人18毛片水真多免费看| 亚洲性69影院在线观看| 2020因为爱你带字幕免费观看全集 | 亚洲AV无码成人精品区在线观看| ww在线观视频免费观看| 野花视频在线官网免费1| 亚洲国产精品无码久久SM| 国产免费女女脚奴视频网| 久久亚洲精品国产精品| 成人毛片视频免费网站观看| 国产免费久久精品99久久| 亚洲中文字幕久久精品无码喷水 | 免费影院未满十八勿进网站| 亚洲综合一区二区精品久久|