Доступ к параметрам строки запроса в методе пост-конструкции в управляемом компоненте с областью представления
Вопрос
У меня есть следующая страница XHTML.
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:ui="http://java.sun.com/jsf/facelets">
<h:head>
<title>Test</title>
</h:head>
<f:metadata>
<f:viewParam name="id" value="#{testManagedBean.id}" maxlength="20"/>
</f:metadata>
<h:body>
<h:form id="form" prependId="true">
</h:form>
</h:body>
</html>
Управляемый компонент соответствует указанной выше странице JSF.
@ManagedBean
@ViewScoped
public final class TestManagedBean implements Serializable
{
private static final long serialVersionUID = 1L;
private Long id;
@PostConstruct
private void init() {
System.out.println("id = "+id);
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
}
я прохожу id
в качестве параметра строки запроса с использованием URL-адреса – https://localhost:8181/Project-war/admin_side/Test.jsf?id=1
.
Пытаюсь отобразить id
в init()
метод всегда null
.
Это демонстрация.В действительности, <f:viewParam>
на самом деле помещается внутрь <ui:define name="metaData">
и в главном шаблоне <ui:insert name="metaData"/>
определено.
Что я здесь упускаю из виду?
Я несколько раз передавал такие параметры и преобразовывал их в объект JPA с помощью соответствующих преобразователей, но не знаю, почему скалярное значение не устанавливается для свойства управляемого компонента.Я попробовал изменить тип id
в String, но это тоже не помогло (и @ManagedProperty(value="#{id}")
работал).
Решение
Значение f:viewParam
недоступен во время @PostConstruct
.Использовать f:viewAction
вместо.