<a4j:ajax event="click" render="tempval" listener="#{question.setParameters}" />
このコードを使用すると、サーバーは次のメッセージで例外をスローします
#{...} is not allowed in template text
これはどのように発生し、どうすれば解決できますか?
#{...}
JSP をビュー テクノロジとして使用していて、次のようなテンプレート テキストを使用している場合に、このエラーが発生します(これ<p>
は単なる例であり、プレーンな HTML 要素である可能性があります)。
<p>#{bean.property}</p>
つまり、JSP ではサポートされていませんが、その後継の Facelets ではサポートされています。JSP では、以下を明示的に使用する必要があります<h:outputText>
。
<p><h:outputText value="#{bean.property}"></p>
#{...}
ただし、すでに JSF コンポーネントで使用している特定のコード スニペットでは、a4j
タグ ライブラリが によって JSP タグ ライブラリとして適切に登録されていない<%@ taglib %>
場合、またはa4j
タグ ライブラリがクラスパスに見つからない場合にのみ発生します。この方法では、<a4j:ajax>
タグは解析されず、EL 式を持つすべての属性を含むプレーン テキストとして扱われます。そのため#{question.setParameters}
、テンプレート テキストでは EL として扱われますが、これは JSP ではサポートされていません。
しかし、あなたの問題はもっと大きく、含まれている RichFaces 4.x コンポーネント ライブラリは<a4j:ajax>
JSPをサポートしていません。JSP は JSF 2.0 以降非推奨となり、Facelets に引き継がれています。RichFaces などのすべての JSF コンポーネント ライブラリは、JSP のサポートを終了することを決定しました。これは、2 つの異なるビュー テクノロジである JSP と Facelets のタグ ライブラリとコンポーネントを開発およびサポートするのは、非常に多くの作業を必要とするためです。そのため、RichFaces 4.x が既にクラスパスにあり、それを によって適切に登録したとしても、JSP ファイルが名前空間に存在しない<%@ taglib %>
ため、JSPでは機能しません。.tld
a4j
JSF 2.0 互換のコンポーネント ライブラリを使用するには、JSP から Facelets に移行する必要があります。別の方法は、代わりに古い RichFaces 3.x バージョンを使用することです。バージョン 3.3.3 は、JSP で JSF 2.0 をサポートします。<a4j:support>
同じことを達成するためのタグを提供します。ただし、この方法ではテクノロジーが後退していることに注意してください。あなたは前進し続けるべきです。JSP をやめて、その後継の Facelets に行きましょう。
私は同じ問題に直面しました。エラーの原因は、#{...} を使用してページのフィールドに値を割り当てる javascript のコメント行でした。削除すると正常に機能し、奇妙に聞こえますが、これが起こったことです。