1

MyFaces CODI のすばらしい機能を試しています。タイプセーフなナビゲーションは非常に便利です。次のように、コントローラ Bean でアクション メソッドの結果を指定できます。

public Class<? extends ViewConfig> goBack() {
    return Pages.ListView.class;
}

すべての開発 IDE の過剰なリファクタリング機能を考えると、これは本当に素晴らしいことです。

しかし、この機能を使用したい場合、viewParameter を次のビューに渡すときに問題が発生します。このアクション メソッドを呼び出すには、次のようにコマンド ボタンを使用する必要があります。

<h:commandButton id="backButton" value="#{msgs.Button_Back}" 
action="#{viewBean.goBack()}" />

このコマンドボタンを使用すると、パラメーターを渡すことができません。「通常の」ボタンまたはリンクがそれを行います:

<h:button id="backButton" value="#{msgs.Button_Back}" outcome="siteBefore.xhtml">
   <f:param name="itemId" value="5" />
</h:button>

欠点は、「通常の」ボタンがアクション メソッドを使用しないため、CODI のタイプセーフ ナビゲーションの利点に参加できないことです。

では、これら 2 つの機能を組み合わせる可能性はありますか? (viewparams を渡し、typesafe ナビゲーションを使用する)

前もって感謝します!

4

2 に答える 2

1

彼らはあなたが探しているものを実装しました。https://issues.apache.org/jira/browse/EXTCDI-216を参照してください。

于 2011-08-19T16:41:07.110 に答える
0

@スティーブンR

タイプセーフ ナビゲーションを使用する場合、CODI は viewParams を含めることをサポートしていませんが、問題追跡システムに従うと、有望な機能のように思えます。

https://issues.apache.org/jira/browse/EXTCDI-171

問題の履歴から、最近 (約 4 週間前) にステータスが更新されたばかりであり、すぐに含まれる可能性があることがわかります。おそらく、コミッターの 1 人がこの投稿をフォローしており、この新機能の大まかなタイム ラインを更新してくれませんか?

さらに、タイプ セーフ ナビゲーションの機能については、JSF 仕様で説明されています。

http://java.net/jira/browse/JAVASERVERFACES_SPEC_PUBLIC-977

回避策として、CODI wiki (以下の URL の一部を参照) のヒントに従って、Pages.ListView.class.getName()バッキング Bean のアクション メソッド内で追加の viewParams を連結できる場所を使用することをお勧めします。このようにして、ナビゲーションはタイプ セーフになり、IDE のリファクタリング機能を活用できます。この方法では、パラメーターのみがタイプセーフではありません...

タグを使用することをお勧めします<f:attribute/>ので、このようにトラフを歩く必要はありません

String viewParam = "";
for (UIComponent comp : event.getComponent().getChildren()) {
   if (comp instanceof UIParameter ) {
      UIParameter myParameter = (UIParameter) comp;
    if (myParameter.getName().equals("myParameterName")) {
        viewParam = myParameter.getValue());
    }
}
}
// add your viewParam to the navigation string here

ここでの欠点は、コードの奥深くにあるパラメーターの名前がハードコードされていることです。そのため、CODI に新しい機能が追加されたら、リファクタリングする価値があるかもしれません

cwiki.apache.org/EXTCDI/jsf-usage.html#JSFUsage-TypesafeNavigation

于 2011-08-08T19:03:20.517 に答える