JSFアプリケーションでブラウザにXMLを送信する必要があります。このXMLは、アプリケーションによって生成されます。 私はそれを作成しようとしますが、JSFアプリケーションは毎回HTMLを送信します。JSFでXMLを作成する
xmlを送信するコンテンツタイプを変更するにはどうすればよいですか?
ありがとうございました。
JSFアプリケーションでブラウザにXMLを送信する必要があります。このXMLは、アプリケーションによって生成されます。 私はそれを作成しようとしますが、JSFアプリケーションは毎回HTMLを送信します。JSFでXMLを作成する
xmlを送信するコンテンツタイプを変更するにはどうすればよいですか?
ありがとうございました。
これを行うにはいくつかの方法があります。 JSPでそれを行うのはちょっと面倒です。
既に言及したように、サーブレットを使用して、そこに変数を挿入/ロードすることができます。セッションコンテキストにアクセスして、例えば:あなたのバッキングBeanのメソッドからHTTPレスポンスへ
MyBean myBean = (MyBean)FacesContext.getCurrentInstance()
.getExternalContext().getSessionMap().get("myBean");
それとも出力でき、それを。例:
try {
String xml = "<person>damian</person>";
FacesContext ctx = FacesContext.getCurrentInstance();
final HttpServletResponse resp = (HttpServletResponse)ctx.getExternalContext().getResponse();
resp.setContentType("text/xml");
resp.setContentLength(xml.length());
resp.getOutputStream().write(xml.getBytes());
resp.getOutputStream().flush();
resp.getOutputStream().close();
ctx.responseComplete();
} catch (IOException e) {
e.printStackTrace();
}
それとも、あなたが<f:view>
タグで応答タイプを設定することができのFaceletsを使用している場合。
私はサーブレットがJSFのものではなくXMLを返すようにします。私は、JSF(およびJSPやその他のUIレイヤー)を「人間が読める」コンテンツとして返すようにします。 XMLは機械可読である。
RE:セッションデータ - 私はこれをやったことがない、JSFを使用していないだけでUI層としてそれを知っているが、簡単にGoogleが戻る:http://blogs.oracle.com/chrisf/entry/retrieving_jsf_session_variables_in
あなたがcontent-typeを指定する必要があります(秒14.17。)の戻るページはtext/xml
です。現在はtext/html
と設定されています。
ブラウザは、返されるデータの種類を判断するためにさまざまなメカニズムを使用していますが、HTTP Content-type
ヘッダーを設定するのが適切で最も信頼性の高い方法です。
申し訳ありません - 私はJSFに精通していないので、これを修正する方法についてはアドバイスできませんが、今すぐ探してみましょう!
はいこのコンテンツタイプを設定したいと思いますが、JSFページでこれを行うことはわかりません。 – Kiva
JSP内でコンテンツタイプを設定できます。私はあなたがJSPを使用しており、バッキングビーンからXMLコンテンツを作成していると仮定します。このようなJSPは、出力XMLになります。
<%@page contentType="text/xml"%><?xml version="1.0" encoding="UTF-8"?>
<portfolio>
<stock>
<symbol>SUNW</symbol>
<name>Sun Microsystems</name>
<price>17.1</price>
</stock>
<stock>
<symbol>AOL</symbol>
<name>America Online</name>
<price>51.05</price>
</stock>
<stock>
<symbol>IBM</symbol>
<name>International Business
Machines</name>
<price>116.10</price>
</stock>
<stock>
<symbol>MOT</symbol>
<name>MOTOROLA</name>
<price>15.20</price>
</stock>
</portfolio>
あなたは、簡単にあなたが通常のHTMLを出力するJSPのために行うような方法であなたのバッキング豆から豆の値であることがこれらのハードコードされた値を変更することができます。
これを試してみましょう;) – Kiva
ここでは、にfaceletでそれを行うにはいくつかのサンプルコードを持っている:
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets">
<ui:define name="metadata">
<f:metadata>
<f:event type="preRenderView"
listener="#{clientManager.initialize}" />
</f:metadata>
</ui:define>
<f:view contentType="text/xml">
<ui:repeat var="client" value="#{clientManager.list}">
<client>#{client.name}</client>
</ui:repeat>
</f:view>
</ui:composition>
レンダリングHTML、JSFは、独自のタグを評価し、として使用するようにXMLタグをレンダリングするとき、それがない方法のように彼らです。
なぜJSPタグは "厄介"ですか? XMLを提供するページをお持ちの場合、これは論理的な処理のようですか? 私はあなたの例のようにXMLストリームを出力したいのか、JSPでXML構造を定義したいのか、彼のバッキングBeanを使ってデータ要素を埋めたいのかどうかということになります。 –
真。ページ上でのレンダリングが「便利」であるかもしれないが、通常はIMOというのは厄介なことがあります。 Faceletsや他の "view"フレームワークでも同じことができます。 – Damo