2016-03-04 3 views
1

home.xhtmll'action d'invocation à f: viewAction tout en naviguant à l'aide de p: commandButton

<p:button outcome="product" value="Login Simple Button"/> 
<p:commandButton value="Login" action="#{homeController.validate}" update="logindialog"/> 

product.xhtml

<f:metadata> <f:viewAction action="#{productController.readProductGroup}" /> </f:metadata> 

simple p: bouton de navigation et invoque avec succès readProductGroup(); mais p: commandButton ne fait même pas que la méthode homeController.validate() renvoie 'product' et navigue avec succès vers product.xhtml.

Avec le bouton p: je n'ai pas la possibilité d'invoquer des méthodes de serveur, d'utiliser l'attribut de mise à jour, etc. dont j'ai besoin. Ce dont j'ai besoin est, pour pouvoir utiliser les attributs comme update, action/actionListener etc. dans le bouton de la page home.xhtml et en même temps lorsque vous naviguez vers product.xhtml, vous devriez pouvoir appeler la fonction productController. readProductGroup sous f: metadata au moment de pageload.

Veuillez nous suggérer.

+0

erreurs de validation? – Kukeltje

+0

N'a eu aucune erreur, juste que la méthode n'a pas été appelée que je voulais invoquer. Basé sur la suggestion ci-dessous produit utilisé? Faces-redirect = true et fait fonctionner. – user5281896

Répondre

1

Le <f:viewAction> est conçu pour s'exécuter sur des requêtes GET, pas sur des requêtes POST. Pour invoquer des actions sur des requêtes POST, vous devez utiliser <h:commandXxx>.

Si vous voulez vraiment exécuter <f:viewAction> sur des requêtes POST aussi pour une raison quelconque, il vous suffit de définir son attribut onPostback sur true.

<f:viewAction ... onPostback="true" /> 

D'autre part, il est aussi très bien possible que vous ne comprenez pas beaucoup sur idempotence, navigation et GET POST contre. La navigation par POST est considérée comme une mauvaise pratique. Vous pouvez appliquer le modèle POST-redirect-GET en envoyant une méthode de redirection dans l'action en ajoutant la chaîne de requête ?faces-redirect=true au résultat.

public void validate() { 
    // ... 

    return "product?faces-redirect=true"; 
} 

Voir aussi How to navigate in JSF? How to make URL reflect current page (and not previous one)


au Unrelated problème concret, le nom de la méthode d'action me laisse l'impression que vous êtes pas au courant d'utiliser correctement validateurs JSF. Dans ce cas, lisez attentivement JSF 2.0 validation in actionListener or action method.

+0

Beaucoup de bon matériel dans les liens fournis. product? faces-redirect = true a résolu le problème. Merci beaucoup de partager tous ces détails. – user5281896