0

JBoss EL リゾルバーのオンライン ドキュメントには次の文があり ます。

この EL への拡張機能がどのように機能するかを完全に理解することが重要です。ページがレンダリングされると、パラメーター名が保存され (hotel.id や user.username など)、ページが送信されるときに (値式として) 評価されます。オブジェクトをパラメータとして渡すことはできません!

しかし、このヒントを誤って読む前に、プロジェクトでオブジェクトを関数パラメーターとして使用していたので、うまくいきました! それはどのように可能ですか?今は魔法がかかっているのではないかと心配しています...

編集:実際には、フレームワーク スタック (MyFaces、Facelets、Trinidad、Spring、Webflow) で問題なく完全に価値のあるオブジェクトをパラメーターとして使用していることに注意してください。これがどのように可能かを尋ねています。たとえば、xhtml テンプレートでこれを行うことができます: "#{pageBean.formatAccount(account)}" アカウントは非常に複雑なクラスです。ドキュメントによると、それは不可能であることはわかっていますが、可能です。将来の困難を恐れるべきですか?それが問題です。

4

2 に答える 2

2

そこには「非標準」のオブジェクトがあるという意味でした。Stringつまり、 、 などではなくInteger、Javabeans などの十分な値のオブジェクトです。


更新:ドキュメントの意味がわかりました。これらの値は、実際には複雑なオブジェクトとして渡されたのではなく、値式を表す単純なバニラ文字列として渡されたということです。文字どおり、"bean.hotel""bean.user.address"など。ページが送信されると、これらの文字列は値式として評価され、それに関連付けられた複合オブジェクトが JSF メモリから取得されます。

ここで重要なのは、フォーム送信の後続のリクエストで、フォームの最初の表示と同じ複雑なオブジェクトを保持する必要があるということです。Bean がリクエスト スコープの場合、元のオブジェクトは、つまり、レスポンスが終了すると失われます。後続のリクエスト中に、Bean のコンストラクターでまったく同じ複合オブジェクトを再度構築したいと考えています。この「問題」を解決するもう 1 つの方法は、セッション スコープ、Seam 会話スコープ、JSF 2.0 ビュー スコープなどのより広いスコープに Bean を配置することです。

それは、ドキュメントの次の文が伝えようとしているものでもあります。

ページがレンダリングされるときだけでなく、送信されるときにもパラメーターが使用可能であることを確認する必要があります。ページが送信されたときに引数を解決できない場合、アクション メソッドは null 引数で呼び出されます。

于 2010-08-08T04:51:04.553 に答える
1

Seam フレームワークでは許可されています。JSF だけでは許可されていません。これが Seam を使用する利点の 1 つです。オブジェクトをパラメーターとして渡すことができます。

于 2010-08-08T04:37:45.423 に答える