2011-10-26 7 views
2

J'ai deux pages xhtml et deux beans gérés.JSF - Rediriger vers la page et mémoriser l'ID du paramètre pour la recherche

Sur la première page, j'ai une liste de sujets (les enregistrements de la table de base de données - la seconde colonne contient <h:commandLink> tags):

enter image description here

Partie du Code réduit:

<rich:column><h:outputText value="#{item.id}"/></rich:column> 
<rich:column><h:outputText value="#{item.createdBy}"/></rich:column> 
<rich:column> 
    <h:commandLink value="#{item.topic}" action="#{myTools.setMenuItem('posts')}"/> 
</rich:column> 

I utilise action="#{myTools.setMenuItem('posts')}" pour rediriger vers la page posts.xhtml. Comment est-ce que je peux passer le paramètre "#{item.id}" pour pouvoir trouver tous les articles au sujet avec ID donné?

Mise à jour (en utilisant DataModel): Cela pourrait être la voie:

<h:commandLink value="#{item.topic}" action="#{myTopic.submit}"> 

public String submit() 
{ 
    topic = model.getRowData(); 
    return "/posts.xhtml?faces-redirect=true&id=" + topic.getId(); 
} 

Mais je ne pas encore savoir comment passer le paramètre topic.getId() à un autre bean (MyPosts) ..?

Répondre

4

Passez-le également.

E.g.

<h:commandLink value="#{item.topic}" action="#{myTools.navigate('posts', item.id)}"/> 

avec

public String navigate(String menuItem, Long id) { 
    this.menuItem = menuItem; 
    return menuItem + "?faces-redirect=true&id=" + id; 
} 

Le haricot n'a pas et ne devrait pas besoin d'être portée de session. La portée de la vue est correcte. Sinon, l'utilisateur final sera confronté à un comportement non intuitif lors de l'interaction avec la même page dans plusieurs onglets/fenêtres du navigateur.

+0

Merci BalusC, j'ai essayé quelque chose de similaire, mais quand je redirige en utilisant 'menuItem +"? Faces-redirect = true & id = "+ id ; ', je ne sais pas comment utiliser le paramètre' id' dans le bean MyPosts .. ?? – gaffcz

+0

Utilisez '' dans la vue cible 'posts.xhtml' ou' @ ManagedProperty' dans le bean cible 'MyPosts'. Voir aussi http://stackoverflow.com/questions/4888942/viewparam-vs-managedpropertyvalue-param-id – BalusC

+0

Merci encore, ça marche vraiment! – gaffcz

2

Vous pouvez utiliser:

<f:setPropertyActionListener target="#{propertyToSet}" value="#{item.id}" />

dans votre commandLink.

+0

Merci KayKay, ça marche vraiment! Et MyPosts doit être SessionScoped, pas ViewScoped .. – gaffcz

1

Vous pouvez ajouter un champ masqué, stocker l'ID dans ce champ avant de l'envoyer (utilisez onclick dans Javascript) et lier ce champ caché à une variable dans le Bean.

<h:inputHidden id="selectedId" value="#{beakbean.selectedId}"> 

<h:commandLink value="#{item.topic}" onclick="updateSelectedId()" action="#{myTools.setMenuItem('posts')}"/> 

function updateSelectedId(){ 
    //put the selected id in the field selectedId 
} 
+0

Merci aussi, medopal :) – gaffcz

Questions connexes