问题描述
是否可以通过以下方式使用 JSF (PrimeFaces)页面? :
Is it possible to use a JSF (PrimeFaces) page in the following fashion ? :
- 外部应用程序(不是基于 JSF 的)使用 URL 参数执行 HTTP GET
- JSF 页面读取这些参数(例如,如),并调用支持Bean业务方法,而无需向用户的浏览器呈现任何内容
- 将用户透明地发送到与步骤2中调用的backing bean方法的导航结果相对应的页面.
- external application (not JSF-based) does an HTTP GET with URL parameters
- JSF page reads those parameters (e.g. as described here) and invokes a backing bean business method, without rendering anything to the user's browser
- The user is transparently sent to a page corresponding to the navigation outcome of the backing bean method invoked in step 2.
换句话说,步骤 2 的 PrimeFaces 页面仅涉及调用后备豆业务方法的副作用,并且永远不会显示.单击步骤 1 的外部应用程序上的链接后,用户将进入步骤 3 的页面.
In other words, the PrimeFaces page of step 2 is involved only for the side effect of calling the backing-bean business method and is never displayed. The user after clicking on a link on the external application of step 1 lands in the page of step 3.
推荐答案
使用 <f:viewParam>
将GET参数设置为bean属性,并使用 <f:event>
执行Bean操作并使用 NavigationHandler
可以以编程方式执行导航.
Use <f:viewParam>
to set GET parameters as bean properties and use <f:event>
to execute a bean action and use NavigationHandler
to perform navigation programmatically.
查看:
<f:metadata>
<f:viewParam name="foo" value="#{bean.foo}" />
<f:viewParam name="bar" value="#{bean.bar}" />
<f:event type="preRenderView" listener="#{bean.action}" />
</f:metadata>
Bean:
public void action() {
// ...
FacesContext context = FacesContext.getCurrentInstance();
NavigationHandler navigationHandler = context.getApplication().getNavigationHandler();
navigationHandler.handleNavigation(context, null, "outcome");
}
请注意,根据具体的功能要求,JSF不一定是适合该工作的工具.我会调查您是否最好使用 servlet过滤器甚至是普通的.
Note that, depending on the concrete functional requirement, JSF might not necessarily be the right tool for the job. I'd investigate if you couldn't better use a servlet filter or even a plain servlet for the purpose.
- What can <f:metadata>, <f:viewParam> and <f:viewAction> be used for?
- Hit a bean method and redirect on a GET request
这篇关于JSF:调用backing-bean方法而不呈现页面(使用URL参数)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!