Jsf1.2jspからのカスタムコンポーネント:include
-
12-11-2019 - |
質問
私の質問を始める前に、ここに私の不幸な制限があります:
- 私は2ではなくJSF1.2を使用しています;だから複合成分はありません。
- 私はfaceletsの代わりにレンダリングにJSPを使用しています;そのため、これらの複合コンポーネントもありません。
- サードパーティのタグライブラリ(richFaces、iceFacesなど)を使用することは許可されていません。)
これらの制限は石で設定されています。
今私の質問に移ります。現在、私たちはJSPを持っています subview
アドレスの作成を処理します。これには、バッキングbeanとともに、多くのjavascriptがあります。このページは直接使用されることはありません。代わりに、それはaを使用して含まれています <jsp:include />
.
ただし、変更できるようにしたい属性がいくつかあります。たとえば、郡が必要ですか、現在アドレススクラビングなどを行っていますか。これを行うには、カスタムコンポーネントを使用するのが理にかなっています(私は思いますか?).しかし、私はこれを行うための最良の方法は本当にわかりません。
できれば、このJSPを複合コンポーネントに変換して、それを使用して実行します。しかし、それは本当に私の限界に基づくオプションではありません。
私のオプションは何ですか?Javascriptの量が関係していなければ、これはそれほど難しいことではありません。私は私の説明が曖昧だったことを知っています;しかし、私は直接の答えよりもガイダンスを探しています。私はカスタムJSF1のようなものをグーグルで検索しました。javascriptなどを使ったxコンポーネントしかし、私は多くの良い記事を見つけていません。
事前に感謝します。
解決
JSPタグファイルを作成します。
/WEB-INF/tags/foo.tag
<%@ tag body-content="empty" %>
<%@ attribute name="countryRequired" required="false" type="java.lang.Boolean" %>
<%@ attribute name="showAddress" required="false" type="java.lang.Boolean" %>
<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<h:panelGrid columns="2">
<h:outputLabel for="country" value="Country" />
<h:inputText id="country" value="#{bean.country}" required="${countryRequired}" />
<c:if test="${showAddress}">
<h:outputLabel for="address" value="Address" />
<h:inputText id="address" value="#{bean.address}" />
</c:if>
</h:panelGrid>
次のように宣言して使用します(追加のXML構成は必要ありません)。:
<%@ taglib prefix="my" tagdir="/WEB-INF/tags" %>
...
<my:foo showAddress="true" />
JstlもここではFaceletsのような「ビルド時間の表示」タグであることに注意してください。また、使用できないことに注意してください #{}
JSPタグ属性を参照する。