Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.6k views
in Technique[技术] by (71.8m points)

jsf - Creating an "Edit my Item"-page in Java Server Faces with Facelets

Let's say that you have the following Facelet ( Using Facelets 1.1.12 ):

edit_item.xhtml which i access with edit_item.jsf

Now i have another page sending me to edit_item.jsf with the GET-paremeter ID the uri looks like this: http://mysite.com/edit_item.jsf?ID=200

How do you access a Bean and fetch the Information, and display this on the requesting page with JSF and Facelets? Is there a way to run a bean when a page loads?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

You can use the faces-config.xml configuration to inject the ID from the param map.

For this simple bean:

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
  }
}

You could inject the ID using this definition:

  <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>

Facelets form:

<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>

This isn't the only way to do it (you could look the ID up directly using the FacesContext for example).


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...