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

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

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

    瘋狂

    STANDING ON THE SHOULDERS OF GIANTS
    posts - 481, comments - 486, trackbacks - 0, articles - 1
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    stuts2 返回xml

    Posted on 2010-09-17 11:13 瘋狂 閱讀(3671) 評(píng)論(0)  編輯  收藏 所屬分類: java strutsapache項(xiàng)目

    關(guān)于Struts2 返回XML的問題


    1. Action其實(shí)是一個(gè)POJO,所以我們可以直接把Action生成一個(gè)XML.只要把Result Type設(shè)為xslt就可以了:
          <action name="XmlModel" class="cpu.XmlModelAction">
                <result name="success" type="xslt" />
          </action>
    里面包含了Action的所有屬性,還有Locale等信息. 可以在瀏覽器里輸入http://localhost:8080/XXX/XXX/XmlModel.action來看.

    2. 為了定制自己想要的XML,我們可以輸入?yún)?shù)來輸出自己想要的Action的某個(gè)屬性(屬性可以是一個(gè)List).
          <action name="XmlModel" class="cpu.XmlModelAction">
                <result name="success" type="xslt">
                      <param name=”exposedValue”>modelList</param>
                </result>
          </action>

    3. 如果有多于一個(gè)屬性呢.加個(gè)大括號(hào)圍起來
          <action name="XmlModel" class="cpu.XmlModelAction">
                <result name="success" type="xslt">
                      <param name=”exposedValue”>{modelList, type}</param>
                </result>
          </action>

    4. 以上三個(gè)方法都是由Action 來控制生成格式.那么對(duì)于我們這種控制欲很強(qiáng)的人來說并不滿足,最好是由我們自己來定義生成樣子.那么這時(shí)我們就要做的就是在屬性里生成一個(gè) org.w3c.dom.Document屬性.注意:不要用org.dom4j.Document類.要不會(huì)出現(xiàn)轉(zhuǎn)化錯(cuò)誤,死得很慘.
          <action name="XmlModel" class="cpu.XmlModelAction">
          <result name="success" type="xslt">
                <param name="exposedValue">xmlDoc</param>
          </result>
          </action>
    上面的xmlDoc就是 Action里的org.w3c.dom.Document類型.

    5. 我只會(huì)用并且非要用org.dom4j.Document類怎么辦? 那就在最后轉(zhuǎn)化成 org.w3c.dom.Document:
    Java代碼 復(fù)制代碼
    1. import java.io.ByteArrayInputStream;     
    2. import java.io.IOException;     
    3.       
    4. import javax.xml.parsers.DocumentBuilderFactory;     
    5. import javax.xml.parsers.ParserConfigurationException;     
    6.       
    7. import org.xml.sax.SAXException;     
    8.       
    9. public class XmlUtil {     
    10.      
    11.       private XmlUtil() {     
    12.       }     
    13.       
    14.       public static org.w3c.dom.Document XmlString2W3cDom(String xml)     
    15.                   throws SAXException, IOException, ParserConfigurationException {     
    16.             byte[] byteArray = xml.getBytes("UTF-8");     
    17.             ByteArrayInputStream baos = new ByteArrayInputStream(byteArray);     
    18.             DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();     
    19.             org.w3c.dom.Document doc = factory.newDocumentBuilder().parse(baos);     
    20.             return doc;     
    21.       }     
    22.       
    23.       public static org.dom4j.Document W3c2Dom4j(org.w3c.dom.Document doc) {     
    24.             if (doc == null) {     
    25.                  return (null);     
    26.             }     
    27.             org.dom4j.io.DOMReader xmlReader = new org.dom4j.io.DOMReader();     
    28.             return (xmlReader.read(doc));     
    29.       }     
    30.       
    31. }     

    Action里加上一句: xmlDoc = Xmlutil.XmlString2W3cDom(dom4jDoc.asXML());
    上面的xmlDoc就是 Action里的org.w3c.dom.Document類型.

    6. 用org.dom4j.dom.DOMDocumentFactory()來建立 Document.而不要用DocumentHelper.createDocument()來產(chǎn)生.最后直接cast一下.
     
    public String execute() throws UnsupportedEncodingException, ParserConfigurationException, SAXException, IOException {     
    1.   InfoCpuService cpuSvc = null;     
    2.   cpuSvc = (InfoCpuService) ServiceLocator.getInstance().getService(InfoCpuService.class);     
    3.       
    4.   modelList = cpuSvc.getModels(prodBrand);     
    5.       
    6.   log.info(ReflectionToStringBuilder.toString(this));     
    7.      
    8.  org.dom4j.Document dom4jDoc = new org.dom4j.dom.DOMDocumentFactory().createDocument();     
    9.     
    10.                Element root = dom4jDoc.addElement("root");     
    11.  root.addAttribute("prodType""CPU");     
    12.     
    13. for (Object o : modelList) {     
    14.   root.addElement("model").addAttribute("name", (String) o);     
    15.  }     
    16.      
    17. //xmlDoc = XmlUtil.XmlString2W3cDom(doc.asXML());     
    18.  xmlDoc = (Document) dom4jDoc;     
    19.      
    20.   HttpServletResponse response = ServletActionContext.getResponse();     
    21.   response.setContentType("text/xml;charset=UTF-8");     
    22.   response.setHeader("Cache-Control""no-cache");     
    23.        
    24.  return SUCCESS;     
    25.     

    其中三句代碼是為了防止生成中文亂碼
       HttpServletResponse response = ServletActionContext.getResponse();
       response.setContentType("text/xml;charset=UTF-8");
       response.setHeader("Cache-Control", "no-cache");

    7. 在action中返回類型最好設(shè)置為import org.w3c.dom.Document;
    private Document retXML;  

    配置格式為:
    Java代碼
    1. <action name="XmlModel" class="com.XmlModelAction">   
    2.            <result name="success" type="xslt">   
    3.                  <param name=”exposedValue”>retXML</param>   
    4.            </result>   
    5.  </action>  
    轉(zhuǎn)自:http://skyful.javaeye.com/blog/505775
    主站蜘蛛池模板: 国产亚洲精品2021自在线| 黑人粗长大战亚洲女2021国产精品成人免费视频 | 亚洲 无码 在线 专区| 国产乱子伦精品免费无码专区| 女人让男人免费桶爽30分钟| 在线jyzzjyzz免费视频| 午夜网站免费版在线观看| 成人毛片免费观看视频在线 | 男人和女人高潮免费网站 | 亚洲第一网站免费视频| 精品亚洲成AV人在线观看| 亚洲欧洲日产国产最新| 亚洲va成无码人在线观看| 国产精品久久亚洲不卡动漫| 亚洲人成网站日本片| 亚洲乱色熟女一区二区三区蜜臀| 亚洲依依成人亚洲社区| 美女又黄又免费的视频| ssswww日本免费网站片| 成人黄网站片免费视频| 97国产在线公开免费观看| 免费观看激色视频网站(性色)| 一色屋成人免费精品网站| 毛片免费全部免费观看| 免费无码又爽又刺激高潮的视频| 免费在线观看的黄色网址| 中文字幕亚洲电影| 亚洲精品人成在线观看| 亚洲国产成人久久99精品| 亚洲精品成a人在线观看夫| 日本视频免费观看| 免费网站观看WWW在线观看| 91av免费观看| 日韩成全视频观看免费观看高清| 亚洲国产综合无码一区二区二三区| 中文亚洲成a人片在线观看| 亚洲午夜免费视频| 亚洲中文字幕无码av永久| 四虎影视永久在线精品免费| 暖暖在线视频免费视频| 成人一a毛片免费视频|