JSF 애플리케이션으로 브라우저에 XML을 보내야합니다. 이 XML은 응용 프로그램에 의해 생성됩니다. 그것을 만들려고하는데 JSF 응용 프로그램이 매번 HTML을 보냅니다.JSF로 XML 작성
xml을 보내려면 콘텐츠 유형을 어떻게 변경할 수 있습니까?
도움 주셔서 감사합니다.
JSF 애플리케이션으로 브라우저에 XML을 보내야합니다. 이 XML은 응용 프로그램에 의해 생성됩니다. 그것을 만들려고하는데 JSF 응용 프로그램이 매번 HTML을 보냅니다.JSF로 XML 작성
xml을 보내려면 콘텐츠 유형을 어떻게 변경할 수 있습니까?
도움 주셔서 감사합니다.
이렇게하는 방법에는 여러 가지가 있습니다. JSP로하는 것은 조금 더 심합니다.
이미 언급했듯이 서블릿을 사용하고 여기에 변수를 삽입 /로드 할 수 있습니다. 세션 컨텍스트에 액세스하여 예 : 당신의 백업 빈의 메소드에서 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 레이어로 알고 있지만, 빠른 구글 반환 : 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를 사용하고 있고 backing 빈에서 XML 컨텐트를 생성한다고 가정합니다. 이 것 출력 XML 같은 JSP :
<%@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를 위해 할 것이다 방법에 백업 콩에서 콩 값으로이 하드 코드 값을 변경할 수 있습니다.
Ok 시도해 보겠습니다.) – Kiva
당신이 facelet에서 할 수있는 몇 가지 예제 코드를 가지고 : HTML을 렌더링 할 때 그것을 수행하는 방법처럼
<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>
을, JSF는 자신의 태그를 평가하고로 사용하도록 XML 태그를 렌더링 그들은.
JSP 태그가 "지저분한"이유가 무엇입니까? XML을 제공하는 페이지를 가지고 있다면 논리적 인 일처럼 보입니다. 예제에서와 같이 XML 스트림을 출력 할 것인지 또는 JSP에서 XML 구조를 정의하고 그의 backing-bean을 사용하여 데이터 요소를 채우고 싶은지 여부에 따라 달라질 수 있습니다. –
참. 페이지에서 렌더링하는 것이 "유용 할 수 있지만 IMO는 일반적으로 불쾌한 경우가 있습니다. Facelets 또는 다른 "보기"프레임 워크를 통해 동일한 작업을 수행하는 경우에도 마찬가지입니다. – Damo