2

検索プロセスの概要を表示する jsf facelet があります。検索エンジンで要素が 1 つしか見つからなかった場合に、詳細ページにリダイレクトしたいと考えています。Java コードからこのリダイレクトに関する「知識」を得たいので、Bean にこのリダイレクトを実装したくありません。

だから私はそのようなものを書きたい:

<ui:redirect if="#{searchResult.count eq 1}" target="details.jsf">
   <f:param name="id" value="#{searchResult.firstResult.technicalId}" />
</ui:redirect>

そのための解決策やアイデアはありますか?

JSF 2.2 にはページ アクションがありますが、私は JEE6 を使用しており、JSF 2.0 が利用可能です。ところで。現在、MyFaces、Primefaces、Richfaces を使用しています。

ご挨拶。

4

2 に答える 2

1

ビューではなく、コントローラーでこのジョブを実行する必要があります。

検索結果を取得するには、まず検索フォームでアクション メソッドを呼び出す必要がありますね。そこでリダイレクトジョブを実行するだけです。faces-redirect=trueアクション結果のクエリ文字列に を指定することで、リダイレクトを送信するように JSF に指示できます。

public String search() {
    results = service.find(query);

    if (results.size() == 1) {
        return "details?faces-redirect=true&id=" + results.get(0).getTechnicalId();
    }
    else {
        return "results";
    }
}

または、 によって処理される GET 要求の場合は<f:event type="preRenderView">、次のようにします。

public void onPreRenderViewListener() {
    results = service.find(query);

    if (results.size() == 1) {
        FacesContext.getCurrentInstance().getExternalContext().redirect("details.jsf?id=" + results.get(0).getTechnicalId());
    }
}
于 2012-05-04T13:14:54.900 に答える
0

最もクリーンな方法は、Bean でアクションを生成することです。とにかく、JavaScript で検索数が 1 の場合に備えて、クリックをシミュレートすることをお勧めします。

カウントを含む非表示の入力が必要です。

<h:inputHidden id="count" value="#{searchResult.count}" />

リダイレクトをトリガーする非表示のボタン:

<h:commandButton id="redirectButton" action="details.jsf" style="display: none;" />

次に、検索をトリガーするときに、入力カウントを更新し、カウントの値が 1 であるかどうかを確認できる oncomplete を更新してから、commandButton をクリックします。

Jquery を使用する場合は、次のようになります。

    if($("#count").val()==1){
        $("#redirectButton").click();
    }
于 2012-05-04T11:13:56.590 に答える