Il suffit de ne pas utiliser la vue/séance scope haricots (donc utiliser uniquement la demande ou de l'application scope haricots) et de l'état mis à économie client
plutôt que par le réglage (par défaut) server
le paramètre contextuel suivant dans web.xml
.
<context-param>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>client</param-value>
</context-param>
Alors JSF ne crée pas la session et stocker l'état d'affichage dans un champ caché avec le nom javax.faces.ViewState
sous la forme chaque fois que nécessaire.
Le coût de création et de gestion des sessions est cependant assez négligeable. De plus, vous devez toujours compenser le coût de la sérialisation de l'état d'affichage et de la bande passante du réseau lors de l'utilisation de l'état d'affichage côté client.
Mise à jour selon votre commentaire:
@BalusC Oui, cela pourrait être une solution globale. Mais j'ai besoin de cette méthode seulement dans cette page publique. Dans d'autres pages, je veux la méthode d'économie d'état côté serveur.
Ah oui. Désolé, je ne vois pas de façons sympas dans JSF/Facelets de désactiver la session ou de changer l'état de la vue en sauvegardant à la demande. J'envisagerais d'utiliser un HTML pur <form>
au lieu d'un JSF <h:form>
, de le soumettre à une autre page JSF et d'utiliser @ManagedProperty
dans le bean associé à la page JSF. Par exemple.
<form action="register.jsf" method="post">
<input type="text" name="username" />
<input type="password" name="password" />
<input type="submit" />
</form>
avec
@ManagedBean
@RequestScoped
public class Register {
@ManagedProperty(value="#{param.username}")
private String username;
@ManagedProperty(value="#{param.password}")
private String password;
@PostConstruct
public void init() {
// Do your thing here.
System.out.println("Submitted username/password: " + username + "/" + password);
}
// ...
}
@BalusC Ajouté pourquoi en question. – angelcervera