gpt4 book ai didi

java - 如何从 JSF 支持 bean 调用 servlet 或 Web 服务?

转载 作者:行者123 更新时间:2023-12-02 00:45:16 24 4
gpt4 key购买 nike

我真的找不到正确的方法来做到这一点。

我有这个方法并且它有效,但这似乎是一种解决方法来完成如此基本的事情。

  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 服务会怎样?我该如何调用它?感谢您的帮助。

最佳答案

你并没有真正给他们打电话。您正在将响应重定向给他们。您基本上是在告诉网络浏览器它应该在给定的 URL 上触发新的 HTTP 请求。这是否是最佳实践取决于唯一的功能需求。据给定的代码示例提示,这对我来说似乎完全合法。尽管我可能会使用普通的 HTML <form action="Excel">为此而不是 <h:form>使用托管 bean。同样,这取决于功能需求(只需问问自己:为什么这个特定的需求到底需要 JSF?验证?特定的后处理?)。

如果您实际上想要以编程方式调用它并处理其响应,那么您应该使用 HTTP 客户端 API。基本的 Java SE API 提供了裸露的 java.net.URLConnection用于此的 API。如果它是一个 Web 服务,例如 JAX-WS/JAX-RS,那么您应该为此使用 API 提供的客户端。

另请参阅:

<小时/>

与具体问题无关,手动调用FacesContext#responseComplete()当您使用 ExternalContext#redirect() 时是不必要的(但是当您从 JSF 盖下拖出 HttpServletResponse 并在其上调用 sendRedirect() 时,这是必要的)。

关于java - 如何从 JSF 支持 bean 调用 servlet 或 Web 服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5160939/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com