JSF-1.2 のパラメーターを使用したカスタム関数呼び出しのサポートが必要で、このドキュメントhttp://docs.oracle.com/javaee/5/tutorial/doc/bnahq.html#bnaioに出会いました。
しかし、その関数に可変引数を使用することは可能ですか?
配列を使用してみましTag Library
たが、その場合、JSF が関数を認識しないようです。
JSF-1.2 のパラメーターを使用したカスタム関数呼び出しのサポートが必要で、このドキュメントhttp://docs.oracle.com/javaee/5/tutorial/doc/bnahq.html#bnaioに出会いました。
しかし、その関数に可変引数を使用することは可能ですか?
配列を使用してみましTag Library
たが、その場合、JSF が関数を認識しないようです。
いいえ、EL メソッド式は可変引数をサポートしていません。現在のEL 2.2 バージョンにはありません。将来のEL 3.0 バージョンにもありません。
別のアプローチを探す必要があります。具体的な機能要件が不明なため、どれもお勧めできません。
更新:したがって、機能要件は次のとおりです。
ページに含まれる JavaScript でメッセージ バンドルからパラメータ化されたメッセージを使用する必要があります。メッセージ バンドルでパラメータ化されたファイル名を持つファイルを削除しようとすると、エラー メッセージまたは警告メッセージのようなもの。
まあ、それを回避するための賢明な回避策はありません。次の 2 つのオプションがあります。
さまざまな量の引数を取る一連の EL 関数を作成します。
#{my:format1(...)}
#{my:format2(...)}
#{my:format3(...)}
...
<h:outputFormat>
結果を出力する代わりに、リクエスト スコープの変数に格納するように拡張します。
<my:outputFormat ... var="foo">
<f:param ... />
<f:param ... />
<f:param ... />
...
</my:outputFormat>
...
#{foo}
JSF2 用のOmniFaces JSF ユーティリティ ライブラリには、<o:outputFormat>
コンポーネントのフレーバーといくつかのof:formatX()
関数の両方のソリューションがあります。JSF 1.x では使用できませんが、オープン ソースであり、ある程度の洞察が得られるはずです。
リストまたは配列をカスタム関数に渡すことができます。
警告: このコードはテストされていないため、汚いと感じるかもしれません。これは完全なハックです。
マネージド Bean として登録された 2 つのアーティファクトが必要です。
1) 破壊されたMap
タイプ:
/** Important: must be none-scoped */
public class ArrayBuilder extends AbstractMap<Object, Object> {
private List<Object> list = new ArrayList<Object>();
@Override public Object get(Object entry) {
if(entry instanceof MakeArray) {
return list.toArray();
} else {
list.add(entry);
return this;
}
}
@Override public Set<Entry<Object, Object>> entrySet() {
return Collections.emptySet();
}
}
アレイの作成をトリガーするポイズン ピル:
/** should be application scoped bean */
public final class MakeArray {
}
EL式:
#{fn:foo(arrayBuilder['one']['two']['three'][makeArray])}
コードの目的は、Object
3 つの文字列を含む配列を関数に渡すことfoo
です。
これが実際に機能するかどうかはわかりません。