Вы на самом деле не звоните им.Вы перенаправляете ответ на них.Вы в основном говорите веб-браузеру, что он должен запустить новый HTTP-запрос по указанному URL.Является ли это наилучшей практикой или нет, зависит от единственного функционального требования.Насколько намекает данный пример кода, он кажется мне совершенно законным.Хотя я бы, вероятно, использовал для этого обычный HTML <form action="Excel">
вместо <h:form>
с управляемым бином.Опять же, это зависит от функциональных требований (просто спросите себя: зачем именно вам нужен JSF для этого конкретного? Проверка? Конкретная постобработка?).
Если вы на самом деле хотите вызвать егои обработайте его ответ программно, тогда вы должны использовать HTTP-клиент API.Базовый API Java SE предлагает для этого голый java.net.URLConnection
API.Если это Web-сервис, например, JAX-WS / JAX-RS, то для этого следует использовать клиент, предоставленный API.
См. Также:
Вне зависимости от конкретной проблемы, ручной вызов FacesContext#responseComplete()
не требуется при использовании ExternalContext#redirect()
(но это необходимо, когда вы вытаскиваете HttpServletResponse
из-под крышки JSF и вызываете sendRedirect()
на нем).