2014-10-22 3 views
1

JSF 관리 빈에서 CSV 파일을 검색하려고합니다.클라이언트 측에서 CSV 응답 받기

지금 내가 이런 식으로 일을하고,

CsvController : 콩 콘텐츠 형식의 텍스트/CSV로 출력을 응답합니다.

samplecsv.xhtml : 코드가 포함 웹 페이지 : 나 브라우저에이 페이지를 탐색 할 때 다운로드 대화 상자가 CSV 파일을 다운로드 할 수있는 열립니다

#{csvController.generateReport()} 

.

report.xhtml : samplecsv.xhtml을 없애 직접 report.xhtml에 콩에서 csv 파일을 검색 할 수있는 방법이 있나요

d3.csv('http://mysite/samplecsv.xhtml'); 

: 그 CSV를 다운로드

웹 페이지? d3.csv('http://mysite/csvController/report') 과 같은 것이 좋습니다

+0

내가 그것을 사용한 적이! 것은 우리가 자바에서 정말로 프로가 아니다. 우리는 빠른 웹 응용 프로그램이 필요했고 JSF (primeface 및 omnifaces 포함)와 스프링 (모든 세계에서 최상임)을 통합하여 JSF를 작성했습니다. 단기간에 좋은 결과를 얻었지만 JSF를 완전히 제거하고 순수한 스프링 MVC를 사용하려고합니다. 이러한 변화를 염두에두고 csv 파일에 Spring 서블릿을 사용하고 나머지는 Faces Servlet으로 남겨 두는 것이 좋습니다. – coolscitist

+0

그게 내가 찾는 것입니다. 이제 새로운 구현은 보고서 이름을 매개 변수로 사용하는 CsvServlet으로 구성됩니다. 나는 보고서를 해결하는 방법에 대해 여전히 혼란스럽고 제대로 초기화되었는지 확인한다. 각 보고서는 autowired DataSource 및 기타 서비스로 다른 bean에 액세스하는 관리 Bean입니다. 모든 보고서를 CsvServlet에 삽입하고 싶지 않습니다. Csv 요청에서 보고서 이름을 읽은 후 데이터 소스 및 서비스로 자동 초기화 된 해당 보고서 빈을 어떻게 호출 할 수 있습니까? – coolscitist

+0

이것은 내가 생각하는 것입니다 : 1. CsvServlet : 각 요청에 대해 ReportResolver를 사용하여 CSV 파일로 응답합니다. 2. ReportResolver : CsvServlet은 보고서 이름을 전달하며 ReportResolver는 보고서를 초기화하고 CSV 문자열을 보고서에서 가져올 수 있어야합니다. 3. 보고서 : SQL 쿼리를 실행하고 결과 집합을 csv 문자열로 변환하는 서비스를 호출하여 csv 문자열을 출력으로 반환합니다. (@Autowired는 여전히 그것들 모두에 대해 작동해야 함) – coolscitist

답변

1

당신이 묻는 패턴은 JSF가 작동하는 방식에 본래의 것이 아닙니다. JSF 2: invoking managed bean directly

관리 대상 빈에서 직접 컨텐츠를 다운로드하려면 다음과 같이하십시오. 어쨌든, 당신의 report.xhtml에있는 다운로드 링크 URL은 How to provide a file download from a JSF backing bean?

내 권장되는 방법은 새로운 @WebServlet("/csvController") 또는 JAX-RS @Path("/csvController") 프런트 엔드를 만들고 여기에서 비즈니스 로직을 호출하는 것입니다 참조 <f:commandLink action="#csvController.download()}" /> 같은 일부 JSF 컴포넌트 생성한다 . 서블릿에서의 관리 빈에 액세스하려면이 같은 그것을 할 수 : Possible to inject @ManagedBean as a @ManagedProperty into @WebServlet?

을 어쨌든, 난 당신이에서 살펴 봐야도록 권장한다 : Backing beans (@ManagedBean) or CDI Beans (@Named)? Are @ManagedBeans obsolete in JavaEE6 because of @Named in CDI/Weld?

+0

답장을 보내 주셔서 감사합니다. 우리는 스프링과 프라임 사이의 통합을 사용하고 있습니다 : https://github.com/michail-nikolaev/primefaces-spring-scopes. 우리는 primefaces 부분을 천천히 제거하려고합니다. 우리는 모든 페이지에 FacesServlet을 사용합니다. 대신 csv 파일을 Spring의 서블릿으로 사용할 수 있습니까? – coolscitist

+0

예. 할 수있어. 다음은 Spring에서 다운로드 컨트롤러를 구현하는 2 가지 예제입니다. http://www.codejava.net/frameworks/spring/spring-mvc-with-csv-file-download-example http://www.codejava.net/frameworks/ spring/spring-mvc-sample-application-for-downloading-files. 어쨌든 # generateRepòrt 함수를 스프링 관리 빈으로 옮기는 것이 좋습니다. –

+0

그렇다면 CSS에서는 SpringServlet을 사용하고 나머지 어플리케이션에서는 FacesServlet을 사용해 보겠습니다. – coolscitist

관련 문제