2009-08-25 5 views
5

JSF 애플리케이션으로 브라우저에 XML을 보내야합니다. 이 XML은 응용 프로그램에 의해 생성됩니다. 그것을 만들려고하는데 JSF 응용 프로그램이 매번 HTML을 보냅니다.JSF로 XML 작성

xml을 보내려면 콘텐츠 유형을 어떻게 변경할 수 있습니까?

도움 주셔서 감사합니다.

답변

7

이렇게하는 방법에는 여러 가지가 있습니다. 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의를 사용하는 경우. 여기

+0

JSP 태그가 "지저분한"이유가 무엇입니까? XML을 제공하는 페이지를 가지고 있다면 논리적 인 일처럼 보입니다. 예제에서와 같이 XML 스트림을 출력 할 것인지 또는 JSP에서 XML 구조를 정의하고 그의 backing-bean을 사용하여 데이터 요소를 채우고 싶은지 여부에 따라 달라질 수 있습니다. –

+0

참. 페이지에서 렌더링하는 것이 "유용 할 수 있지만 IMO는 일반적으로 불쾌한 경우가 있습니다. Facelets 또는 다른 "보기"프레임 워크를 통해 동일한 작업을 수행하는 경우에도 마찬가지입니다. – Damo

0

서블릿은 JSF가 아닌 XML을 리턴합니다. JSF (및 JSP 및 기타 UI 레이어)를 "사람이 읽을 수있는"컨텐츠로 반환합니다. XML은 기계가 읽을 수 있습니다.

RE : 세션 데이터 - 나는 JSF를 사용하지, 이런 짓을 한 적이 단지 UI 레이어로 알고 있지만, 빠른 구글 반환 : http://blogs.oracle.com/chrisf/entry/retrieving_jsf_session_variables_in

0

당신은 content-type 지정해야합니다의 (초 14.17를.) 돌아 오는 페이지는 text/xml입니다. 현재는 text/html으로 설정됩니다.

브라우저는 반환되는 데이터 유형을 결정하기 위해 다양한 메커니즘을 사용하지만 HTTP Content-type 헤더를 설정하는 것이 가장 적합하고 신뢰할 수있는 방법입니다.

죄송합니다 - 저는 JSF 지식이 없으므로이를 해결하는 방법을 조언 할 수는 없지만 지금 보길 원하는 것을 제공합니다!

+0

예이 콘텐츠 유형을 설정하고 싶습니다만 JSF 페이지에서이를 수행 할 수 있는지 알 수 없습니다. – Kiva

3

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를 위해 할 것이다 방법에 백업 콩에서 콩 값으로이 하드 코드 값을 변경할 수 있습니다.

+0

Ok 시도해 보겠습니다.) – Kiva

0

당신이 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 태그를 렌더링 그들은.