簡體   English   中英

如何從JSF支持bean調用servlet或Web服務?

[英]How to call servlet or web service from JSF backing bean?

我嚴重找不到正確的方法。

我有這種方法,它可以工作,但是似乎可以做一些基本的事情。

  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服務怎么辦? 我該怎么打電話呢? 謝謝你的幫助。

你不是真的在打電話給他們。 您正在將響應重定向到他們。 您基本上是在告訴Web瀏覽器,它應該在給定的URL上觸發新的HTTP請求。 這是否是最佳實踐,取決於唯一的功能要求。 就給定的代碼示例而言,對我來說似乎完全合法。 盡管我可能為此使用了普通的HTML <form action="Excel"> ,而不是帶有托管bean的<h:form> 同樣,這取決於功能要求(問一下自己:為什么對這個特定的JSF到底需要JSF,驗證或特定的后處理?)。

如果您實際上要調用它並以編程方式處理它的響應,則應該使用HTTP客戶端API。 基本的Java SE API為此提供了裸露的java.net.URLConnection API。 如果它是一個Web服務,例如JAX-WS / JAX-RS,那么您應該為此使用API​​提供的客戶端。

也可以看看:


與具體問題無關,當您使用ExternalContext#redirect()時,無需手動調用FacesContext#responseComplete() (但是從JSF封面sendRedirect() HttpServletResponse並在其上調用sendRedirect()時,這是必需的)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM