0

私のアプリケーションでは、シンプルモードで複数のprimefacesfileUploaderを含むフォームがあります。これらのアップローダーコンポーネントは、dataTableの各行に1つずつ、動的に生成されます。
必要に応じてマークを付けたいので、これを試しました。

<h:form enctype="multipart/form-data" id="aform">
   <p:dialog id="dlgId">
    <p:dataTable var="foo" id="table"
        value="#{myBean.fooList}">
        <p:column>
           <p:fileUpload value="#{foo.file}" mode="simple" required="true"/>
        </p:column>
    </p:dataTable>

    <p:commandButton id="submit" value="Submit" ajax="false"
        actionListener="#{myBean.listener}" update="dlgId">
    </p:commandButton>
  </p:dialog>
</h:form>

問題は、すべてのファイルをアップロードしてもフォームが正しく機能しているのに、検証が実行されないことです。PrimeFacesのバージョンは3.4です。

4

1 に答える 1

1

コメントによると、実際には、送信後に閉じたり非表示にしたりするダイアログ内にこのフォームがあります。基本的に、ダイアログ内のフォームが送信され検証エラーが発生したときにvisible、ダイアログの属性を評価する必要があります。true

あなたはそれを次のように達成することができます:

<p:dialog ... visible="#{dialogForm.submitted and facesContext.validationFailed}">
    <h:form binding="#{dialogForm}">
        ...
    </h:form>
</p:dialog>

具体的な問題とは関係なく、ダイアログはフォーム内に入らないでください。代わりに、ダイアログは独自のフォームを持つ必要があります(1)ダイアログはJSによって本文の最後に暗黙的に再配置される可能性があり、2)送信したくないため/ダイアログのビューの外にある他のすべての入力を処理します)。したがって、ダイアログが現在、他のすべての入力コントロールを備えたフォーム内にある場合は、ダイアログを外側、たとえば本文の一番下に移動する必要があります。

于 2012-12-17T15:35:20.090 に答える