Как обработать параметры URL строки запроса в компоненте поддержки при загрузке страницы?
Я читал, как отправлять параметры с помощью JSF, но что, если пользователь вводит их companyId
в URL при доступе к их странице входа в систему? Например,
http://my.компания.url / productName / login.лица?companyId=acme.
как мы это делаем сейчас, есть немного скриптлет код, который берет значение из запроса, а затем установить его в сессии. Этот параметр изменяет их внешний вид, начиная со страницы входа в систему, поэтому у каждого клиента может быть свой вид страницы входа. Мы используем extjs, пока я не переключусь на JSF.
есть ли способ сделать это с помощью JSF 2 или, возможно, PrimeFaces?
3 ответов
Да, вы можете использовать <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;