1

非常に単純な JSF フォームがあります。

<h:form id="simpleSearch">
    <h:inputText id="surname" value="#{myBean.surname}" required="true" />
    <h:commandLink>Search</h:commandLink>
</h:form>

このページがレンダリングされると、生成されるアンカーは次のようになります (簡潔にするために、生成された onclick コードを取り除きました)。

Search<a href="#" onclick="..."></a>

ご覧のとおり、「検索」はアンカーの外側にあり、アンカーの本文は空です。これは私には役に立たない。これは使えません。

ここで何が起こっているのかを修正/理解するのに役立つ提案/参照/奇跡はありますか?

ありがとう!

4

2 に答える 2

4

HTML コンポーネントと JSF コンポーネントを混在させています。これは通常、JSP ではうまく機能しません。h:outputText「検索」テキストをコンポーネントに入れたい:

<h:commandLink><h:outputText value="Search" /></h:commandLink>
于 2010-06-03T19:15:52.347 に答える
3

従来の JSF 1.0/1.1 では、テンプレート テキストはJSF コンポーネント ツリーの前にレンダリングされます。<f:verbatim>JSF コンポーネント ツリーに取り込むには、テンプレート テキストをラップする必要があります。ただし、h:outputTextプレーンな HTML でない限り、 の使用がより一般的です。例えば

<f:verbatim><h1>Title</h1></f:verbatim>

escapeそれ以外の場合は、エスケープされないように、の属性h:outputTextを false に設定する必要があります。

<h:outputText value="<h1>Title</h1>" escape="false" />

JSF 1.2 以降では、改善されたビュー ハンドラーを使用して、テンプレート テキストを「通常の方法」で使用できます。コーディングから期待される方法で、コンポーネント ツリーに自動的に取り込まれます。

したがって、この問題は、レガシー JSF 1.0/1.1 を「まだ」使用していることを示しています。可能であれば、少なくともJSF 1.2にアップグレードすることをお勧めします。Servlet 2.4 と互換性のあるコンテナーで動作させることができます。JSF 1.2 と Servlet 2.4 は 4 年以上前にリリースされました。それはかなり昔のことです。

于 2010-06-03T20:20:14.260 に答える