私はJSF2でプログラミングしており、NetBeansは#{}
式を含む多くのページを作成します。しかし、時々ウェブ上で${}
同じことを見つけました!
違いはありますか?彼らは何ですか?
私はJSF2でプログラミングしており、NetBeansは#{}
式を含む多くのページを作成します。しかし、時々ウェブ上で${}
同じことを見つけました!
違いはありますか?彼らは何ですか?
回答:
#{}
は遅延式用であり(ページのライフサイクルに応じて解決されます)、Beanとの間で読み取りまたは書き込みを行ったり、メソッド呼び出しを行ったりするために使用できます。${}
は、検出されるとすぐに解決される、即時解決の式です。それらは読み取り専用です。詳細については、http://docs.oracle.com/javaee/6/tutorial/doc/bnahr.htmlを参照してください。
「JavaServerFacesドルポンド」をグーグル検索すると、JBoss Expression LanguageFAQから次の結果が得られました。
一部の表現がポンドで始まり、他の表現がドル記号で始まるのはなぜですか?
EL仕様自体については、違いはありません。ELを使用してそれが何を意味するかを決定するのは技術次第です。JSPとJSFの両方で、ポンド記号で始まる式は評価の延期を意味し、ドル記号は即時評価を意味します。これはすべて、リクエスト処理中に式が実際に評価される時期と関係があります。式をJSPまたはFaceletsエンジンではなく、JSFライフサイクルで評価する必要があるため、ポンド記号はJSFコンポーネントで使用されます。
それは良い質問です!私は一度それに直面し、あなたのように、答えを見つけるのに多くの問題を抱えていました...私がこのドキュメントに出くわすまで:
統合ELの重要な機能の1つは、式の即時評価と遅延評価の両方をサポートすることです。即時評価とは、JSPエンジンが式を評価し、ページが最初にレンダリングされた直後に結果を返すことを意味します。据え置き評価とは、表現言語を使用するテクノロジーが独自の機構を使用して、ページのライフサイクルの後半で、適切なときにいつでも表現を評価できることを意味します。すぐに評価される式は、JSP2.0式言語で導入された$ {}構文を使用します。評価が延期される式は、JavaServer Facesテクノロジーによって導入された#{}構文を使用します。
JSF ELはハッシュ(#)を使用し、JSP ELはjsf1.2でドル記号($)を使用します。両方の構文が統合されました。
Javaのドキュメントには、次の説明があります。
$ {customer.name}
#{customer.name}
前者は即時評価構文を使用し、後者は遅延評価構文を使用します。最初の式はnameプロパティにアクセスし、その値を取得し、応答に値を追加して、ページにレンダリングされます。2番目の式でも同じことが起こり得ます。ただし、このタグを使用するテクノロジで許可されている場合、タグハンドラは、この式の評価をページライフサイクルの後半に延期できます。
JavaServer Facesテクノロジーの場合、後者のタグの式は、ページの最初の要求時にすぐに評価されます。この場合、この式は右辺値式として機能します。ポストバック要求中に、この式を使用して、ユーザー入力でnameプロパティの値を設定できます。この場合、式は左辺値式として機能します。
詳細はこちら:値式