2009-01-26 14 views
2

Cela devrait être facile pour un pro:selectOneRadio avec l'action immédiatement après cliquez sur

J'utilise JSF/Facelets/Seam et essaie d'afficher radiobuttons. Ensuite, après que l'utilisateur a cliqué sur l'un des boutons, la valeur devrait être enregistrée et l'utilisateur redirigé vers une autre page immédiatement (c'est-à-dire sans avoir à cliquer sur un bouton de soumission).

Le bouton radio fonctionne, mais pas le réacheminement.

Merci

Répondre

5

Vous pouvez en effet utiliser RichFaces pour ajouter un a4j:support component:

<h:selectOneRadio value="#{myBean.myValue}" ...> 
    ... 
    <a4j:support event="onclick" action="#{myBean.doSomething}"/> 
</h:selectOneRadio> 

Dans votre code Java:

public String doSomething() { 
    // Your code goes here... 
    ... 
    // Now, we move to the new page. 
    return "some-outcome"; 
} 

Cependant, si vous ne pouvez pas (ou ne veulent pas) à ajouter une nouvelle bibliothèque, vous pouvez le faire par l'ancienne façon:

<h:selectOneRadio value="#{myBean.myValue}" ... onclick="this.form.submit();" valueChangeListener="#{myBean.doSomething}"> 
    ... 
</h:selectOneRadio> 

Ce code va soumettre le formulaire où le bouton radio est contenu lorsque l'événement onclick Javascript est détecté. Côté serveur, l'action doSomething sera exécutée. Dans cette méthode, vous pouvez faire une règle de navigation à exécuter:

public void doSomething(ValueChangeEvent evt) { 
    // Your code goes here... 
    ... 
    // Now, we move to another page... 
    FacesContext context = FacesContext.getCurrentInstance(); 
    NavigationHandler navigation = context.getApplication().getNavigationHandler(); 
    navigation.handleNavigation(context, "", "some-outcome"); 
} 

où certains-résultat est un résultat défini dans une règle de navigation sur vos visages-config.xml.

1

Avec 2.0 JSF vous pouvez effectuer les opérations suivantes

<h:selectOneRadio ... 
... 
    <f:ajax event="change" render="@form" /> 
</h:selectOneRadio>