Accès aux paramètres de chaîne de requête dans une méthode de post-construction dans un bean géré à portée de vue
Question
J'ai la page XHTML suivante.
<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>
Le bean géré correspond à la page JSF ci-dessus.
@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;
}
}
je passe id
en tant que paramètre de chaîne de requête en utilisant l'URL - https://localhost:8181/Project-war/admin_side/Test.jsf?id=1
.
Essayer d'afficher id
dans le init()
la méthode est toujours null
.
Ceci est une démonstration.En réalité, <f:viewParam>
est en fait mis à l'intérieur <ui:define name="metaData">
et sur le modèle principal <ui:insert name="metaData"/>
est défini.
Qu’est-ce que j’oublie ici ?
J'ai passé plusieurs fois de tels paramètres et converti en une entité JPA à l'aide de convertisseurs appropriés, mais je ne sais pas pourquoi une valeur scalaire n'est pas définie sur une propriété d'un bean géré.J'ai essayé de changer le type de id
à String mais cela n'a pas aidé non plus (ni @ManagedProperty(value="#{id}")
travaillé).
La solution
La valeur de f:viewParam
n'est pas disponible pendant @PostConstruct
.Utiliser f:viewAction
plutôt.