【发布时间】:2023-03-03 02:24:02
【问题描述】:
我正在尝试从 JSF 托管 bean 中检索 csv 文件。
我现在就是这样做的,
CsvController: 以文本/csv 内容类型响应输出的 Bean。
samplecsv.xhtml: 包含代码的网页:
#{csvController.generateReport()}
当我在浏览器上浏览此页面时,会打开一个下载对话框,可以下载 csv 文件。
report.xhtml:
下载该 csv 的网页:
d3.csv('http://mysite/samplecsv.xhtml');
有没有办法摆脱 samplecsv.xhtml 并直接从 report.xhtml 中的 bean 中检索 csv 文件?
类似d3.csv('http://mysite/csvController/report')
会很完美
【问题讨论】:
-
我没用过!问题是我们并不是真正的java专业人士。我们需要一个快速的 Web 应用程序,并通过将 JSF(带有primefaces 和omnifaces)与spring 集成来构建一个(认为这将是世界上最好的)。它在短期内对我们有好处,但我正在考虑完全删除 JSF 并使用纯 spring mvc。牢记这一转变,将 Spring servlet 用于 csv 文件并将其余部分留给 Faces Servlet 是否是个好主意?
-
这确实是我正在寻找的。现在新的实现将由 CsvServlet 组成,它以报告名称作为参数。我仍然对如何解决报告并确保它正确初始化感到困惑。每个报告都是一个托管 bean,它使用自动装配的 DataSource 和其他服务访问其他 bean。我不想将所有报告注入 CsvServlet。从 Csv 请求中读取报告名称后,如何调用已使用数据源和服务自动初始化的相应报告 bean?
-
这就是我的想法: 1. CsvServlet:对于每个请求,使用 ReportResolver 以 csv 文件响应 2. ReportResolver:CsvServlet 将报告名称传递给它,并且 ReportResolver 应该能够初始化报告和从报告中获取 csv 字符串。 3. 报告:触发 sql 查询,并通过调用将结果集转换为 csv 字符串的服务返回 csv 字符串作为输出。 (@Autowired 应该仍然适用于所有人)
-
我知道 CsvController 将是一个响应 csv 文件的 servlet。我还想要的是报告的自动映射。像site/report/report1 这样的请求应该自动为report1 生成csv。我了解对 /report 的请求将由 CsvController 处理。然后我需要对逻辑进行编码以确定请求要求的报告。会有大量的报告,所以我希望能够自动解决报告。也许我应该使用 Java 反射。
-
好的,所以我必须编写一个自动化系统来正确解析报告,对吧?