4

次のFaceletがあるとします(Facelets 1.1.12を使用):

edit_item.xhtml which i access with edit_item.jsf

これで、別のページがGET-paremeter IDを使用してedit_item.jsfに送信され、URIは次のようになります。http://mysite.com/edit_item.jsf?ID=200

Beanにアクセスして情報を取得し、これをJSFとFaceletsを使用して要求ページに表示するにはどうすればよいですか?ページの読み込み時にBeanを実行する方法はありますか?

4

1 に答える 1

5

設定を使用して、マップfaces-config.xmlからIDを挿入できます。param

この単純な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
  }
}

次の定義を使用してIDを挿入できます。

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

ファセットフォーム:

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

これを行う唯一の方法ではありません(FacesContextたとえば、IDを直接検索できます)。

于 2009-10-06T15:45:19.670 に答える