web-dev-qa-db-ja.com

$ {}と#{}の違いは何ですか?

私はJSF2でプログラミングしており、NetBeansは#{}には式が含まれます。ただし、ウェブ上で時々${}同じことを!

違いはありますか?彼らは何ですか?

73
Filippo1980
  • #{}は、遅延式(これらはページのライフサイクルに応じて解決されます)およびbeanの読み取りまたは書き込み、またはmethod呼び出しの実行に使用できます。
  • ${}immediate resolutionの式であり、検出されるとすぐに解決されます。それらは読み取り専用です。

詳細はこちらをご覧ください: http://docs.Oracle.com/javaee/6/tutorial/doc/bnahr.html

85
Fortunato

「Java Server Faces dollar pound」をGoogleで検索すると、JBoss Expression Language FAQ から次の結果が得られました。

一部の表現がポンドで始まり、他の表現がドル記号で始まるのはなぜですか?

EL仕様自体については、違いはありません。それが何を意味するかを決めるのはELを使用する技術次第です。 JSPとJSFの両方で、ポンド記号で始まる式はdeferred評価を意味し、ドル記号はimmediate評価を意味します。これはすべて、リクエスト処理中に式が実際に評価されるときと関係があります。式をJSPまたはFaceletsエンジンではなくJSFライフサイクルで評価するため、ポンド記号はJSFコンポーネントで使用されます。

11
Jean Hominal

それは良い質問です!私は一度直面しましたが、あなたと同じように、答えを見つけるのに苦労しました... documentation

統合ELの重要な機能の1つは、式の即時評価と遅延評価の両方をサポートしていることです。即時評価とは、JSPエンジンが式を評価し、ページが最初にレンダリングされるとすぐに結果を返すことを意味します。遅延評価とは、式言語を使用するテクノロジが独自の機構を使用して、ページのライフサイクル中のいつかで適切な場合に式を評価できることを意味します。すぐに評価されるこれらの式は、JSP 2.0式言語で導入された$ {}構文を使用します。評価が延期される式は、JavaServer Facesテクノロジーで導入された#{}構文を使用します。

9
Óscar López

Javaのドキュメントには、次の説明があります。

$ {customer.name}
#{顧客名}

前者は即時評価構文を使用し、後者は遅延評価構文を使用します。最初の式はnameプロパティにアクセスし、その値を取得し、応答に値を追加して、ページにレンダリングされます。 2番目の式でも同じことが起こります。ただし、タグハンドラは、このタグを使用する技術で許可されている場合、ページのライフサイクルの後半でこの式の評価を延期できます。

JavaServer Facesテクノロジーの場合、後者のタグの式は、ページの最初のリクエスト中にすぐに評価されます。この場合、この式は右辺値式として機能します。ポストバックリクエスト時に、この式を使用して、ユーザー入力でnameプロパティの値を設定できます。この場合、式は左辺値式として機能します。

詳細はこちら: 値式

5
Chris

JSF ELは、両方の構文が統合されたjsf1.2でJSP ELがドル記号($)を使用するハッシュ(#)を使用します

4
dov.amir