Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从JSF支持bean调用servlet或web服务?_Java_Jsf 2_Java Ee 6 - Fatal编程技术网

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电子表格供用户下载。是的,根据代码片段,我已经猜到了:)至于这本书,好几个人以前问过我。我不知道从哪里开始。周围已经有很多好书了。只需继续在网站上发布问题:)