2

フォームから入力を取得し、値を Bean フィールドに入れる必要があります。

その後、ボタンを押すと Bean アクションがトリガーされ、終了したときに

href を使用して別のページに移動する必要があります。

私はこれを試しました:

<div class="getname">
    <h:form>
        Enter name
        <h:inputText value="#{bean.name}" />
        <br/>
    </h:form>

    <h:commandButton value="Purchase" action="#{bean.sendName}"/>
    <a href="name.jsf?id=#{bean.id}" />
</div>

(IDに従って)正しいname.jsfページに移動できましたが、アクションはトリガーされません。

何か案は?

4

2 に答える 2

2

コンポーネントは、フォームのcommandButton値を管理プロパティに送信するものです。<h:form>これを行うには、コンポーネント内に配置する必要があります。

さらに、アクションが呼び出された後にページから移動するための別のリンクは必要ありません。マネージド Bean の Action メソッドはString、FacesServlet が FORWARD するナビゲーションを定義する を返すことができます。

@ManagedBean("bean")
public class MyBean {

  private String id;
  private String name;

  /// property accessors and other stuff

  public String sendName() {
    // do stuff
    return "name.jsf?id=" + this.id;
  }
}

アクションが完了すると、この戻り値は、その定義されたビューに移動するように指示します。

于 2013-03-08T19:06:22.543 に答える
0

コマンド ボタンと href はどちらも異なるアクションです。コマンド ボタンをクリックするとアクションが実行され、href をクリックするとユーザーは name.jsf ページに移動します。

 <h:commandButton value="Purchase" action="#{bean.sendName}"/>
    <a href="name.jsf?id=#{bean.id}" />

あなたの豆にこのようなものが必要です

@ManagedBean("bean")
public class TestBean {

  @ManagedProperty(value = "#{param.id}")
  private String id;
  private String name;

  public String sendName() {
     //do stuff 
     return "name.jsf?id=" + this.id;
  }
}

同じ結果を得るために xhtml でこれを行うこともできます。

<f:metadata>
    <f:viewParam name="id" value="#{bean.id}" />
</f:metadata>

上記の行は、Bean が初期化される前に、要求パラメーター ID から Bean のパラメーター ID を設定します。

于 2013-03-09T21:52:56.963 に答える