J'ai lu comment envoyer des paramètres à l'aide de JSF, mais que se passe-t-il si l'utilisateur tape son companyId
dans l'URL lors de l'accès à sa page de connexion? Par exemple,
http: //my.company.url/productName/login.faces? companyId = acme .
La façon dont nous le faisons maintenant, il y a un peu de code de scriptlet qui saisit la valeur de la demande et la définit ensuite dans la session. Ce paramètre modifie leur apparence à partir de la page de connexion pour que chaque client puisse avoir une vue de page de connexion différente. Nous utilisons extjs jusqu'à ce que je passe à JSF.
Existe-t-il un moyen de le faire en utilisant JSF 2 ou peut-être PrimeFaces?
Oui, vous pouvez utiliser <f:viewParam>
pour définir un paramètre de demande en tant que propriété de bean géré.
<f:metadata>
<f:viewParam name="companyId" value="#{bean.companyId}" />
</f:metadata>
Vous pouvez si nécessaire appeler une action de bean en utilisant <f:viewAction>
(JSF 2.2+ uniquement) ou <f:event type="preRenderView">
.
<f:metadata>
<f:viewParam name="companyId" value="#{bean.companyId}" />
<f:viewAction action="#{bean.onload}" />
</f:metadata>
Lorsque vous utilisez <f:viewAction>
, Vous pouvez même retourner un résultat de navigation.
public String onload() {
// ...
return "somepage";
}
Lorsqu'il n'est pas encore sur JSF 2.2, vous pouvez utiliser ExternalContext#redirect()
pour cela. Voir aussi entre autres Comment effectuer la navigation dans la méthode d'écoute preRenderView .
Notez que cela n'est pas spécifique à PrimeFaces. Cela fait juste partie du JSF standard. PrimeFaces est simplement une bibliothèque de composants qui fournit un support amélioré d'ajax et d'habillage.
les paramètres d'URL peuvent également être traités comme des paramètres de demande afin que vous puissiez également y accéder via
FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap()
Il existe une bibliothèque d'utilitaires, OmniFaces qui le fait hors de la boîte.
@Inject @Param
private String key;
@Inject @Param
private Long id;