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

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

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

    空間站

    北極心空

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

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

     

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

     

        先看官方文檔對plain text結(jié)果的定義:“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” ,返回的結(jié)果是未進行格式和編碼定義的字符串什么意思?就類似于“FreeMarker Result”  ,返回一個*.ftl格式的模板,你完全可以在*.ftl寫string,那么結(jié)果就是string;也可以在里面寫xml,那么結(jié)果就是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結(jié)果,至于它具體是什么,看下面的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。那么返回去的內(nèi)容"<cc>cccccc</cc>"就會被接收方按xml進行解析。

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

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

     

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

     

     

    第二種方式: 直接擴展struts2的結(jié)果集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結(jié)果集進行申明,然后給返回“ajaxResponse”的結(jié)果綁定變量名。這里定義返回Action的String  result變量,即“abc”。

     

     

    第三種方式:利用Velocity ResultFreeMarker Result

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

    posted on 2008-11-24 12:54 蘆葦 閱讀(3384) 評論(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.  回復  更多評論
      

    主站蜘蛛池模板: 亚洲六月丁香六月婷婷蜜芽| 久久亚洲欧美国产精品| 国产乱码免费卡1卡二卡3卡| 亚洲一区二区三区在线网站| 免费人成网站7777视频| 久久久久国产精品免费网站| 亚洲啪AV永久无码精品放毛片| 四虎精品亚洲一区二区三区| 久久久精品免费视频| 亚洲欧美日韩综合久久久久| 亚洲性猛交XXXX| 24小时日本在线www免费的| 一级黄色免费毛片| 91午夜精品亚洲一区二区三区| 免费人成在线观看网站品爱网日本| 国产免费播放一区二区| 亚洲制服丝袜第一页| 亚洲真人无码永久在线| 午夜一级免费视频| 无码国产精品一区二区免费3p| 亚洲JIZZJIZZ妇女| 亚洲欧洲国产日韩精品| 免费人成在线观看视频播放| 久久久久久精品免费看SSS | 99re6在线精品免费观看| 亚洲五月丁香综合视频| 国产亚洲精品国产| 免费一级毛片在线观看| 国产日本一线在线观看免费| 中文字幕免费观看视频| 亚洲一区二区三区成人网站| 亚洲成av人影院| 亚洲片一区二区三区| 免费毛片网站在线观看| 亚洲精品视频在线免费| 久久久久女教师免费一区| 亚洲码欧美码一区二区三区| 亚洲日韩乱码中文无码蜜桃臀| 亚洲欧洲国产精品香蕉网| 亚洲人成人无码网www国产| 四虎影视大全免费入口|