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).
C'est exactement ce que je cherche, merci beaucoup. Je vais rapporter une fois que j'ai testé ça! –
réponse très cool. Merci McDowell. – digitaljoel
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? –