37

我已经阅读了如何使用 JSF 发送参数,但是如果用户companyId在访问他们的登录页面时输入他们的 URL 怎么办?例如,

http://my.company.url/productName/login.faces?companyId=acme

我们现在这样做的方式是,有一些 scriptlet 代码从请求中获取值,然后在会话中设置它。该参数从登录页面开始改变他们的外观和感觉,因此每个客户都可以有不同的登录页面视图。在我切换到 JSF 之前,我们一直在使用 extjs。

有没有办法使用 JSF 2 或者 PrimeFaces 来做到这一点?

4

4 回答 4

61

是的,您可以使用 将<f:viewParam>请求参数设置为托管 bean 属性。

<f:metadata>
    <f:viewParam name="companyId" value="#{bean.companyId}" />
</f:metadata>

如有必要,您可以使用<f:viewAction>(仅限 JSF 2.2+)或<f:event type="preRenderView">.

<f:metadata>
    <f:viewParam name="companyId" value="#{bean.companyId}" />
    <f:viewAction action="#{bean.onload}" />
</f:metadata>

使用时,<f:viewAction>您甚至可以返回导航结果。

public String onload() {
    // ...

    return "somepage";
}

如果还没有在 JSF 2.2 上,您可以使用ExternalContext#redirect()它。另请参阅如何在 preRenderView 侦听器方法中执行导航

请注意,这并不特定于 PrimeFaces。它只是标准 JSF 的一部分。PrimeFaces 只是一个提供增强的 ajax 和换肤支持的组件库。

也可以看看:

于 2012-05-23T17:00:41.890 回答
32

url 参数也可以被视为请求参数,因此您也可以通过

FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap()
于 2012-05-24T19:51:09.023 回答
7

有一个实用程序库OmniFaces可以开箱即用。

@Inject @Param
private String key;

@Inject @Param
private Long id;
于 2018-03-02T10:27:27.220 回答
1

request.getQueryString()如果要获取完整的查询参数字符串,可以使用 。

于 2020-12-19T01:50:52.743 回答