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

Big*_* Al 31 jsf query-string jsf-2 managed-bean http-request-parameters

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

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

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

有没有办法使用JSF 2或PrimeFaces?

Bal*_*usC 49

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

<f:metadata>
    <f:viewParam name="companyId" value="#{bean.companyId}" />
</f:metadata>
Run Code Online (Sandbox Code Playgroud)

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

<f:metadata>
    <f:viewParam name="companyId" value="#{bean.companyId}" />
    <f:viewAction action="#{bean.onload}" />
</f:metadata>
Run Code Online (Sandbox Code Playgroud)

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

public String onload() {
    // ...

    return "somepage";
}
Run Code Online (Sandbox Code Playgroud)

当不在JSF 2.2上时,你可以使用ExternalContext#redirect()它.另请参阅如何在preRenderView侦听器方法中执行导航.

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

也可以看看:


小智 24

url paramters也可以被视为请求参数,因此您也可以访问

FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap()
Run Code Online (Sandbox Code Playgroud)

  • 它们**是**请求参数.然而,您提出的方式允许较少细粒度的转换/验证,这可能导致支持bean中许多不必要的样板代码.另请参阅接受的答案中的"另请参见"链接. (3认同)

Tou*_*umi 5

有一个实用程序库,OmniFaces开箱即用.

@Inject @Param
private String key;

@Inject @Param
private Long id;
Run Code Online (Sandbox Code Playgroud)