Как обрабатывать параметры URL строки запроса GET при поддержке bean при загрузке страницы?

Я читал, как отправлять параметры с помощью JSF, но что, если пользователь вводит их companyId в URL-адрес при доступе к своей странице входа? Например,

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

Как мы это делаем сейчас, есть немного кода сценария, который захватывает значение из запроса и затем устанавливает его в сеансе. Этот параметр изменяет внешний вид, начиная с страницы входа в систему, так что у каждого клиента может быть другой вид страницы входа в систему. Мы используем extjs, пока не перейдем к JSF.

Есть ли способ сделать это, используя JSF 2 или, возможно, PrimeFaces?

Ответ 1

Да, вы можете использовать <f:viewParam>, чтобы установить параметр запроса как управляемое свойство bean.

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

При необходимости вы можете вызвать действие bean, используя <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 и skinnability.

См. также:

Ответ 2

Параметры URL также могут обрабатываться как параметры запроса, поэтому вы также можете получить доступ через

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