2011-07-29 7 views
1

Struts 1.3アプリケーションでAjaxコールがあり、有効なXMLをブラウザに返すのに問題があります。 XMLの内容は正しく返送されていますが、ブラウザは依然として応答タイプをtext/htmlとして再設定します。コンテンツタイプtext/xmlをStruts 1.3のブラウザに出力するには

私のアクションクラスは、次のようになります

public ActionForward newContractCAUAjax(ActionMapping actionMapping, 
     ActionForm actionForm, HttpServletRequest httpServletRequest, 
     HttpServletResponse httpServletResponse)throws Exception { 

    String target="forwardToCAUXML"; 

    DynaActionForm dynaActionForm = (DynaActionForm) actionForm; 

    httpServletResponse.setContentType("text/xml"); 
    httpServletResponse.setHeader("Content-type","application/xhtml+xml"); 

    ... 

    return actionMapping.findForward(target); 
} 

私は現在、ブラウザだけが戻って設定することをXML文字列をつかんされてやって、有効なXMLを取得するjQueryのparseXML()メソッドを使用していますが、これはのように思えますハックと私はむしろストラットを有効なXML応答として応答を返信したいと思います。

答えて

8
httpServletResponse.setContentType("text/xml"); 
httpServletResponse.setHeader("Content-type","application/xhtml+xml"); 

これは意味がありません。2番目の行は、間違ったコンテンツタイプの最初の行を上書きします。

具体的な問題として、私はStrutsをやっていないので間違っているかもしれませんが、実際にJSPにリクエストを転送していると思います。 JspServletは暗黙的にコンテンツタイプtext/htmlを使用します。このようにして、サーブレットベースのコンテンツタイプの変更には何の効果もありません。

<%@page contentType="text/xml" pageEncoding="UTF-8" %> 

(ページのエンコーディングは、またかなり重要であるXMLマークアップのデフォルトを、すなわちUTF-8に)

次のようにJSPでは、JSPのトップに @page宣言によって、それを設定する必要があります

あなたのStrutsアクションメソッドからこれらの2行を削除することを忘れないでください。

+1

コンテンツタイプを.jspに追加すると、私が探していた結果が得られました。 – bittersweetryan

関連する問題