2009-10-06 5 views
4

Disons que vous avez les éléments suivants Facelet (à l'aide Facelets 1.1.12):Création d'une "Modifier mon article" -page en Java Server Faces avec Facelets

edit_item.xhtml which i access with edit_item.jsf 

Maintenant, j'ai une autre page me envoyer edit_item .jsf avec l'ID GET-paremeter l'URI ressemble à ceci: http://mysite.com/edit_item.jsf?ID=200

Comment accéder à un Bean et récupérer l'Information, et l'afficher sur la page avec JSF et Facelets? Existe-t-il un moyen d'exécuter un bean lors du chargement d'une page?

Répondre

5

Vous pouvez utiliser la configuration faces-config.xml pour injecter l'ID à partir de la carte param.

Pour ce haricot simple:

public class BeanWithId implements Serializable { 
    private String id; 
    private String info; 

    private void populateInfo() { 
    info = "Some info from data source for id=" + id; 
    } 

    public String getId() { return id; } 

    public void setId(String id) { 
    this.id = id; 
    populateInfo(); 
    } 

    public String getInfo() { return info; } 
    public void setInfo(String info) { this.info = info; } 

    public String save() { 
    System.out.println("Saving changes to persistence store"); 
    return null; // no navigation 
    } 
} 

Vous pouvez injecter l'ID en utilisant cette définition:

<managed-bean> 
    <managed-bean-name>beanWithId</managed-bean-name> 
    <managed-bean-class>datasource.BeanWithId</managed-bean-class> 
    <managed-bean-scope>request</managed-bean-scope> 
    <managed-property> 
     <property-name>id</property-name> 
     <property-class>java.lang.String</property-class> 
     <value>#{param.ID}</value> 
    </managed-property> 
    </managed-bean> 

forme Facelets:

<h:form> 
    <p>ID: <h:outputText value="#{beanWithId.id}" /></p> 
    <p>Info: <h:inputText value="#{beanWithId.info}" /></p> 
    <p><h:commandLink action="#{beanWithId.save}" value="Save"> 
    <f:param name="ID" value="#{param.ID}" /> 
    </h:commandLink></p> 
</h:form> 

Ce n'est pas la seule façon de faites-le (vous pouvez regarder l'ID directement en utilisant le FacesContext par exemple).

+0

C'est exactement ce que je cherche, merci beaucoup. Je vais rapporter une fois que j'ai testé ça! –

+0

réponse très cool. Merci McDowell. – digitaljoel

+0

Fonctionne un peu bien, mais une fois que vous appuyez sur "Enregistrer" le param.ID est parti et vous obtenez une erreur interne du serveur en disant qu'il n'y a pas de propriété "ID". Comment résoudriez-vous cela? On dirait que cela n'a pas d'importance si j'ajoute une navigation pour revenir à partir de Save, de toute façon. Suggestions? –

Questions connexes