2

コンポジットをレンダリングしていなくても、コンポジットのファセットからの検証が開始されるという問題があります。

問題を次のベアボーン コードに落とし込みました。

コンポジットは次のentityDetailPanelとおりです。

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
            xmlns:ui="http://java.sun.com/jsf/facelets"
            xmlns:h="http://java.sun.com/jsf/html"
            xmlns:composite="http://java.sun.com/jsf/composite"
            xmlns:p="http://primefaces.org/ui"
            xmlns:common="http://java.sun.com/jsf/composite/common">

<composite:interface>
    <composite:attribute name="prefix" required="true" />
    <composite:facet name="lowerPanel"/>
</composite:interface>

<composite:implementation>

    <h:form id="#{cc.attrs.prefix}entityDetailForm2" 
            styleClass="#{cc.attrs.prefix}EntityDetailPanelForm #{cc.attrs.prefix}Listener" >

        <p:messages id="#{cc.attrs.prefix}messages" autoUpdate="true" closable="true"/>

        <p:commandButton 
            value="SAVE" 
            update="@(.#{cc.attrs.prefix}Listener), @(.#{cc.attrs.prefix}EntityDetailPanelForm}"/>

        <composite:renderFacet name="lowerPanel" rendered="false"/>
    </h:form>

</composite:implementation>
</ui:composition>

そして、ここに呼び出しがあります:

<?xml version="1.0" encoding="UTF-8"?>
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
            xmlns:ui="http://java.sun.com/jsf/facelets"
            xmlns:f="http://java.sun.com/jsf/core"
            xmlns:p="http://primefaces.org/ui"
            xmlns:common="http://xmlns.jcp.org/jsf/composite/common">

    <common:entityDetailPanel id="foo" prefix="Instruments">

        <f:facet name="lowerPanel">
            <!--  <p:inputText id="assetClassPrompt" required="true"  requiredMessage="Why do we get this message?"/>-->

            <p:selectOneMenu id="assetClassPrompt" required="true"  requiredMessage="Why do we get this message?"
                             value="#{instrumentController.selectedData.assetClass}">
                 <f:selectItem itemLabel="foo" itemValue="foo"/>
                 <f:selectItem itemLabel="bar" itemValue="bar"/>
            </p:selectOneMenu>
        </f:facet>
    </common:entityDetailPanel>

</ui:composition>

コンボボックスは (レンダリングされていないため) 画面に表示されませんが、レンダリングされていないものに対して検証が行われるのはなぜですか?

[SAVE] ボタンをクリックすると、次のように表示されます。

ここに画像の説明を入力

まだ見知らぬ人は、そのコンボボックスを持たないコンポジットの他の呼び出しでも、この検証エラーが表示されることです。

また、タグに一意の ID を含めない<messages>と、コンポジットの 1 つの使用からのメッセージが、コンポジットの他の使用に表示されることにも気付きました。

これは PrimeFaces または JSF のバグですか、それとも何か不足していますか?

コメントアウトされた<inputText>タグがあることに気付くかもしれません。を交換してから に<selectOneMenu>交換すると<inputText>、問題が発生しなくなります。


私が解決しようとしているより大きな問題を少し解明するのに役立つかもしれないと思いました.

<p:layout>固定要素 (コンポジットのすべての用途) とパラメトリックに渡される非固定要素/パネル (コンポーネントの各用途) の両方を持つ に似たものを作成したいと考えています。

これは、read で示されている項目がコンポジットの呼び出しごとに異なるスクリーンショットです。他のすべては、コンポジットのすべての呼び出しに常に存在します。

ご覧のとおり、パラメーターは次のとおりです。

  1. ボタン パネル (ボタンはコンテキストによって異なります)
  2. フォームの最後に追加するいくつかの追加フィールド (検証が含まれる場合があります)
  3. 下部パネル全体 (検証が含まれる場合があります)

コンポジットのサンプル

これらすべてがまとめて検証される (「SAVE」ボタンの場合) ことに言及する価値があるため、<form>タグを複合出力 (パラメーターとして渡されたパネルを含む) 内に配置することが望ましいです。

4

1 に答える 1