13
<a4j:ajax event="click" render="tempval" listener="#{question.setParameters}" />

このコードを使用すると、サーバーは次のメッセージで例外をスローします

#{...} is not allowed in template text

これはどのように発生し、どうすれば解決できますか?

4

4 に答える 4

12

#{...}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では機能しません。.tlda4j

JSF 2.0 互換のコンポーネント ライブラリを使用するには、JSP から Facelets に移行する必要があります。別の方法は、代わりに古い RichFaces 3.x バージョンを使用することです。バージョン 3.3.3 は、JSP で JSF 2.0 をサポートします。<a4j:support>同じことを達成するためのタグを提供します。ただし、この方法ではテクノロジーが後退していることに注意してください。あなたは前進し続けるべきです。JSP をやめて、その後継の Facelets に行きましょう。

以下も参照してください。

于 2012-09-18T14:19:30.743 に答える
1

私は同じ問題に直面しました。エラーの原因は、#{...} を使用してページのフィールドに値を割り当てる javascript のコメント行でした。削除すると正常に機能し、奇妙に聞こえますが、これが起こったことです。

于 2016-03-28T03:33:20.900 に答える