如何在页面加载时在后台bean中处理GET查询stringURL参数?

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

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

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

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

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

 <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() 。 另请参阅如何在preRenderView侦听器方法中执行导航 。

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

也可以看看:

  • 什么可以使用<f:元数据>,<f:viewParam>和<f:viewAction>?
  • JSF 2.0中的通信 – 处理GET请求参数

url参数也可以被视为请求参数,所以你也可以通过访问

 FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap()