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

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

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

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

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

4 ответа

Решение

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

<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.

Смотрите также:

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

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

Существует библиотека утилит, OmniFaces, которая делает это из коробки.

@Inject @Param
private String key;

@Inject @Param
private Long id;

Вы можете использовать request.getQueryString()если вы хотите получить полную строку параметров запроса.

Другие вопросы по тегам