Java 如何从JSF支持bean调用servlet或web服务?
我真的找不到正确的方法 我有这个方法,它是有效的,但它似乎是一种围绕着做一些基本的工作Java 如何从JSF支持bean调用servlet或web服务?,java,jsf-2,java-ee-6,Java,Jsf 2,Java Ee 6,我真的找不到正确的方法 我有这个方法,它是有效的,但它似乎是一种围绕着做一些基本的工作 FacesContext context = FacesContext.getCurrentInstance(); String baseURL = context.getExternalContext().getRequestContextPath(); String startDateString = sdf.format(startDate); String
FacesContext context = FacesContext.getCurrentInstance();
String baseURL = context.getExternalContext().getRequestContextPath();
String startDateString = sdf.format(startDate);
String endDateString = sdf.format(endDate);
String url = baseURL + "/Excel?pkgLineId="+selectedPkgLine.getPkgLineId()+"&dateStart=" + startDateString + "&dateEnd=" + endDateString;
try {
String encodeURL = context.getExternalContext().encodeResourceURL(url);
context.getExternalContext().redirect(encodeURL);
} catch (Exception e) {
} finally {
context.responseComplete();
}
我还读到调用servlet不被认为是最佳实践。如果我将servlet移动到web服务,会怎么样?我该怎么称呼它呢?谢谢你的帮助。你并不是真的在给他们打电话。您正在将响应重定向到它们。您基本上是在告诉webbrowser它应该在给定URL上触发一个新的HTTP请求。这是否是最佳实践取决于唯一的功能需求。就给定的代码示例提示而言,它对我来说似乎完全合法。尽管我可能会为此使用普通的HTML
,而不是带有托管bean的
。同样,这取决于功能需求(问问你自己:为什么你需要JSF来完成这个特定的任务?验证?特定的后处理?)
如果您确实希望以编程方式调用它并处理其响应,那么您应该使用HTTP客户端API。基本JavaSEAPI为此提供了裸Java.net.URLConnection
API。如果它是一个Web服务,例如JAX-WS/JAX-RS,那么您应该使用客户端为此提供的API
另见:
与具体问题无关,当您使用时,手动调用
FacesContext#responseComplete()
是不必要的(但当您从JSF封盖下拖出HttpServletResponse
并在其上调用sendRedirect()
时,这是必要的)。您并不是真正调用它们。您正在将响应重定向到它们。您基本上是在告诉webbrowser它应该在给定URL上触发一个新的HTTP请求。这是否是最佳实践取决于唯一的功能需求。就给定的代码示例提示而言,它对我来说似乎完全合法。尽管我可能会为此使用普通的HTML
,而不是带有托管bean的
。同样,这取决于功能需求(问问你自己:为什么你需要JSF来完成这个特定的任务?验证?特定的后处理?)
如果您确实希望以编程方式调用它并处理其响应,那么您应该使用HTTP客户端API。基本JavaSEAPI为此提供了裸Java.net.URLConnection
API。如果它是一个Web服务,例如JAX-WS/JAX-RS,那么您应该使用客户端为此提供的API
另见:
与具体问题无关,当您使用时,手动调用
FacesContext#responseComplete()
是不必要的(但当您从JSF封面下拖出HttpServletResponse
并在其上调用sendRedirect()
时,这是必要的)。再次感谢您(您什么时候在写一本书?)。在本例中,我将传递一个servlet参数,以便它可以创建一个Excel电子表格供用户下载。是的,根据代码片段,我已经猜到了:)至于这本书,好几个人以前问过我。我不知道从哪里开始。周围已经有很多好书了。请继续在SO上发帖:)再次感谢你,巴鲁克(你什么时候写书?)。在本例中,我将传递一个servlet参数,以便它可以创建一个Excel电子表格供用户下载。是的,根据代码片段,我已经猜到了:)至于这本书,好几个人以前问过我。我不知道从哪里开始。周围已经有很多好书了。只需继续在网站上发布问题:)