web-dev-qa-db-fra.com

Comment traiter les paramètres d'URL de chaîne de requête GET dans le bean de sauvegarde lors du chargement de la page?

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?

31
Big Al

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.

Voir également:

49
BalusC

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()
24
user1415890

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;
5
Toumi