2

質問を始める前に、残念な制限事項を次に示します。

  1. 2 ではなく JSF 1.2 を使用しています。したがって、複合コンポーネントはありません。
  2. facelets の代わりにレンダリングに JSP を使用しています。したがって、これらの複合コンポーネントもありません。
  3. サードパーティのタグ ライブラリ (richFaces、iceFaces など) を使用することは許可されていません。

これらの制限は固定されています。

今、私の質問に移ります。subview現在、アドレスの作成を処理するJSPがあります。バッキング Bean とともに、これに付随する JavaScript が多数あります。このページが直接使用されることはありません。代わりに、 を使用して含まれてい<jsp:include />ます。

ただし、変更できるようにしたい属性がいくつかあります。たとえば、郡が必要かどうか、現在住所のスクラビングを行っているかどうかなどです。これを行うには、カスタム コンポーネントを使用するのが理にかなっています (と思いますか?)。ただし、これを行う最善の方法はよくわかりません。

できれば、この JSP を複合コンポーネントに変換して、それで完了です。ただし、それは私の制限に基づくオプションではありません。

私のオプションは何ですか?関係する JavaScript の量がなければ、これはそれほど難しくありません。私の説明が漠然としていたことは承知しています。ただし、直接の回答よりもガイダンスを求めています。JavaScript を使用したカスタム JSF 1.x コンポーネントなどをググってみましたが、良い記事はあまり見つかりませんでした。

前もって感謝します。

4

1 に答える 1

2

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 タグの属性を参照するために を使用できないことに注意してください。

于 2012-02-25T05:47:01.660 に答える