如何在页面加载时处理辅助bean中的GET查询字符串URL参数?

时间:2012-05-23 16:49:19

标签: jsf jsf-2 query-string managed-bean http-request-parameters

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

  

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

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

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

4 个答案:

答案 0 :(得分:48)

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

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

如果需要,您可以使用<f:viewAction>(仅限JSF 2.2+)或<f:event type="preRenderView">调用bean操作。

<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()。另见其他How to perform navigation in preRenderView listener method

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

另见:

答案 1 :(得分:24)

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

进行访问
FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap()

答案 2 :(得分:5)

有一个实用程序库,OmniFaces可以直接执行此操作。

@Inject @Param
private String key;

@Inject @Param
private Long id;

答案 3 :(得分:1)

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