<af:declarativeComponent>

af:declarativeComponent declarativeComponent declarative component

UIComponentクラス: oracle.adf.view.rich.component.rich.fragment.RichDynamicDeclarativeComponent
コンポーネント・タイプ: oracle.adf.RichDynamicDeclarativeComponent

ネーミング・コンテナ: 該当。このコンポーネントの子(partialTriggers、findComponent()など)を参照するときには、子のIDの先頭に、このコンポーネントのIDとコロン(:)を付ける必要があります。

特定のタグを必要とせずに、動的な宣言コンポーネントを定義します。動的な宣言コンポーネントを使用すると、コンポーネントのUI定義が他のコンポーネントの構成によって定義され、単一のコンポーネントとして処理されることが可能になります。

JSPタグ属性または<f:attribute>属性を使用して属性を渡すことができます。<f:facet>タグを使用して、ファセットを標準として設定することもできます。定義では、var EL変数を使用してコンポーネントの属性を参照し、<af:componentDef>タグに設定されるcomponentVar EL変数を使用してコンポーネント自体を参照できます。定義で<af:facetRef>タグを使用すると、ファセットを参照できます。各ファセットを参照できるのは1度のみです。

宣言コンポーネントの子としてコンポーネントを配置した場合に、ファセット内部への配置に失敗し、また(facetRefを介した)コンポーネント定義ファイルのファセットの参照に失敗した場合、そのコンポーネントはレンダリングされません。

動的な宣言コンポーネントによって、フラット化された子がサポートされます。これは、宣言コンポーネントの子が宣言コンポーネントの親によって参照できるようになることを意味します。たとえば、宣言コンポーネントのルート・レベルでの入力コンポーネントは、宣言コンポーネントがpanelFormLayoutコンポーネント内に格納されている場合、正確にレンダリングされます。

動的な宣言コンポーネントでは、部分的なトリガーさらには部分的なターゲットであることがサポートされます。コンポーネントの子によってイベントがブロードキャストされると、コンポーネントによって部分更新がトリガーされます。たとえば、宣言コンポーネントの子である入力テキスト・コンポーネント内での値変更のイベントによって、宣言コンポーネント上でリスニングするコンポーネントがトリガーされます。#{attrs.partialTriggers}(varをattrsと想定)を使用すると、アクションによって宣言コンポーネントがトリガーされる場合に子コンポーネントが部分的に更新されることがあります。他のコンポーネントとの唯一の違いは、宣言コンポーネント自体が再レンダリングされないことです。したがって、部分更新中に宣言コンポーネントのviewIdを変更できるようにするには、宣言コンポーネントの親が更新される必要があります。

ストレッチ・レイアウトとフロー・レイアウトおよびスクロール・レイアウトについての注意点:

今日のWebブラウザで、スクロール・バーを持つ領域内に垂直方向にストレッチされたコンテンツを配置するのは確実な方法ではありません。ページ構造の外側の領域をストレッチする場合は、コンポーネント・ツリーのアセンブル方法に注意する必要があります。

経験則:

  1. ユーザーはネストされたスクロールバーを好まないため、スクロール用panelGroupLayoutを別のスクロール用panelGroupLayout内に配置しないでください。
  2. コンポーネントのinlineStyle属性にパーセンテージ高さを指定しないでください。
  3. コンポーネントのinlineStyle属性にpositionスタイルを使用しないでください。
  4. 固定のピクセル高さを使用している場合を除き、レイアウト属性に設定した値とは関係なく、panelSplitterまたはpanelStretchLayoutをpanelGroupLayout内に配置しません。

これらのいずれかの規則に違反すると、ページ構造がページ構造ガイドラインに従わないものとなり、各種Webブラウザおよびコンピューティング・プラットフォーム間で一貫性のあるアプリケーションのレンダリングを行うことができなくなる可能性があります。

例:

<af:declarativeComponent
  id="weather"
  viewid="pagefragments_weatherBox_jsff"
  zip="94065"
  description="Redwood Shores, CA">
  <f:facet name="forecastSummary">
    <af:outputText value="Partly Cloudy"/>
  </f:facet>
  <f:facet name="forecastDetail">
    <af:panelGroupLayout layout="vertical">
      <af:outputText value="72'F"/>
      <af:outputText value="Partly Cloudy"/>
      <af:outputText value="Wind: W at 16 mph"/>
      <af:outputText value="Humidity: 46%"/>
    </af:panelGroupLayout>
  </f:facet>
</af:declarativeComponent>

対応するpagefragments/weatherBox.jsffを次に示します。

<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page"
          xmlns:f="http://java.sun.com/jsf/core"
          xmlns:af="http://xmlns.oracle.com/adf/faces/rich"
          version="2.1">
  <af:componentDef var="attrs">
    <af:xmlContent>
<component xmlns="http://xmlns.oracle.com/adf/faces/rich/component">
  <description>
  This component will show weather forecasts in a box.
  </description>
  <facet>
    <facet-name>forecastSummary</facet-name>
    <description>This child draws out the summary forecast</description>
  </facet>
  <facet>
    <facet-name>forecastDetail</facet-name>
    <description>This child draws out the detailed forecast</description>
  </facet>
  <attribute>
    <attribute-name>zip</attribute-name>
    <description>The Zip code of the area</description>
    <required>true</required>
  </attribute>
  <attribute>
    <attribute-name>description</attribute-name>
    <default-value>Unknown</default-value>
    <description>The city/state of the zip code </description>
  </attribute>
</component>
    </af:xmlContent>
    <af:panelHeader text="Weather Forecast for Zip:#{attrs.zip}, #{attrs.description}"
      partialTriggers="#{attrs.partialTriggers}">
      <af:facetRef facetname="forecastSummary"/>
      <af:showDetail>
        <af:facetRef facetname="forecastDetail"/>
      </af:showDetail>
    </af:panelHeader>
  </af:componentDef>        
</jsp:root>

イベント

フェーズ 説明
org.apache.myfaces.trinidad.event.AttributeChangeEvent アプリケーションの起動、
リクエスト値の適用
属性変更を記述するために配信されるイベント。属性変更イベントは、プロパティに対するプログラム的な変更については配信されません。アプリケーションの特定のリクエストなしにレンダラによってプロパティが変更される場合にのみ配信されます。属性変更イベントの例には、クライアント側のサイズ変更をサポートしていた列の幅などがあります。

属性

名前 ELのサポート 説明
attributeChangeListener javax.el.MethodExpression ELのみ 属性変更リスナーへのメソッド・リファレンス。属性変更イベントは、プロパティに対するプログラム的な変更については配信されません。アプリケーションの特定のリクエストなしにレンダラによってプロパティが変更される場合にのみ配信されます。属性変更イベントの例には、クライアント側のサイズ変更をサポートしていた列の幅などがあります。
binding oracle.adf.view.rich.component.<wbr/>rich.fragment.RichDynamicDeclarativeComponent ELのみ コンポーネント・インスタンスをBean上に格納するELリファレンス。これは、バッキングBeanからコンポーネントへのプログラム的なアクセスを提供するため、またはコンポーネントの作成をバッキングBeanに移動するために使用できます。
customizationId String あり この属性は推奨されていません。永続的なカスタマイズを適用するには、id属性を使用する必要があります。この属性は、次のリリースでは削除されます。
id String あり コンポーネントの識別子。識別子は、HTMLで許可される構文のサブセットに準拠している必要があります。
partialTriggers String[] あり 部分更新をトリガーするコンポーネントのID。このコンポーネントは、トリガー・コンポーネント上でリスニングします。トリガー・コンポーネントの1つがなんらかの更新を発生させるイベントを受信した場合、このコンポーネントも更新されることをリクエストします。識別子はソース・コンポーネント(このコンポーネント)に対して相対的であり、NamingContainerで構成されている必要があります。コンポーネントがすでにネーミング・コンテナ内にある場合、単一のコロンを使用するとページのルートから検索を開始でき、複数のコロンを使用するとNamingContainerを上方向に移動できます。たとえば、::を前に置くと、コンポーネントのネーミング・コンテナ(または、コンポーネントがネーミング・コンテナである場合にはそのコンポーネント自体)から出てそこから検索を開始します。:::を前に置くと、2つのネーミング・コンテナ(コンポーネントがネーミング・コンテナである場合にはそのコンポーネント自体も含まれます)から出てそこから検索を開始します。
rendered boolean あり コンポーネントがレンダリングされるかどうか。falseに設定した場合、このコンポーネントについて出力は配信されません(コンポーネントはどのような方法でもレンダリングされず、クライアントで表示できません)。
viewId String あり 使用するビューID。この属性はコンポーネントで設定するのではなく、JSPタグを使用して設定する必要があります。