我正在尝试从JSF托管bean中检索csv文件。
现在我这样做,
CsvController: Bean以内容类型text / csv响应输出。
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')
之类的东西
会是完美的
答案 0 :(得分:1)
您所询问的模式并不是JSF工作方式的原生模式。见JSF 2: invoking managed bean directly
如果您仍想直接从托管bean下载内容,以下是如何执行此操作的示例。无论如何,report.xhtml
中的下载链接的网址应该使用<f:commandLink action="#csvController.download()}" />
{j}一些jsf组件生成。请参阅How to provide a file download from a JSF backing bean?
我推荐的方法是创建一个新的@WebServlet("/csvController")
或JAX-RS @Path("/csvController")
前端,并从此处调用您的业务逻辑。要从servlet访问托管bean,您可以这样做: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?