0

在我的应用程序中,我有一个简单模式下包含多个 primefaces fileUploader 的表单。这些上传器组件是动态生成的,一个用于数据表的每一行。
我想将它们标记为必需,所以我尝试了这个:

<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 回答