<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.  回復  更多評論
      

    主站蜘蛛池模板: 国产精品无码亚洲一区二区三区| 岛国岛国免费V片在线观看| 免费一级毛片在播放视频| 新最免费影视大全在线播放| 亚洲va在线va天堂va四虎| 中国在线观看免费高清完整版| 老子影院午夜伦不卡亚洲| 国产亚洲免费的视频看| 成年性午夜免费视频网站不卡| 国产福利免费视频| 亚洲国产模特在线播放| 亚洲综合色视频在线观看| 亚欧免费视频一区二区三区| 亚洲AV无码一区二区三区鸳鸯影院 | 色爽黄1000部免费软件下载| 久久亚洲精品国产精品黑人| 狼友av永久网站免费观看| 久久国产精品一区免费下载| 亚洲AV成人一区二区三区观看 | 国产午夜无码片免费| 亚洲综合小说另类图片动图| 亚洲色爱图小说专区| 永久免费无码网站在线观看| 无码人妻一区二区三区免费n鬼沢 无码人妻一区二区三区免费看 | yellow免费网站| 亚洲AV男人的天堂在线观看| 国产亚洲成av人片在线观看| 四虎成人免费观看在线网址| 亚洲欧洲免费视频| 亚洲一级片免费看| 亚洲AV无码男人的天堂| 亚洲资源在线视频| 久久综合图区亚洲综合图区| 亚洲免费日韩无码系列 | 国产成人精品免费视频大全| 亚洲综合av一区二区三区| 2022年亚洲午夜一区二区福利 | 亚洲精品无码MV在线观看| 亚洲&#228;v永久无码精品天堂久久| 免费观看国产网址你懂的| 97人妻精品全国免费视频 |