p:messages不显示对话框内p:fileUpload组件校验消息问题
问题原因及解决方案
你的配置存在4个核心问题,逐一修改即可实现校验消息在对话框内展示:
- 未禁用p:fileUpload的默认内置消息展示:
p:fileUpload默认showMessages="true",会直接将校验消息渲染为页面右上角的浮动提示,不会转发到自定义的p:messages组件。 - 未配置上传后的组件更新逻辑:你没有给
p:fileUpload配置update属性,校验完成后不会自动刷新对话框内的p:messages组件,消息无法渲染。 - 未校验上传结果直接关闭对话框:当前
oncomplete逻辑无论上传成功/校验失败都会直接关闭对话框,就算消息生成也会随对话框隐藏无法查看。 p:messages缺少唯一标识,无法被更新逻辑定位。
修改后的完整代码
<h:form id="frmDocUpload" enctype="multipart/form-data"> <p:dialog header="headtext" id="dlgDocUpload" widgetVar="dlgDocUpload" dynamic="true" modal="true" fitViewport="true" resizable="true" closable="true" closeOnEscape="true"> <p:hotkey bind="esc" handler="PF('dlgDocUpload').hide();" /> <p:fileUpload fileUploadListener="#{bean.handleFileUpload}" id="fileUploader" widgetVar="fileUploader" mode="advanced" dragDropSupport="true" multiple="true" process="@form" sequential="true" showMessages="false" update="uploadMsg" oncomplete="if (!args.validationFailed) PF('dlgDocUpload').hide();" sizeLimit="#{bean.documentService.getUploadSizeLimit()}" invalidSizeMessage="Size Limit (#{bean.documentService.getUploadSizeLimitMB()} MB)!" skinSimple="true" /> <p:messages id="uploadMsg" for="fileUploader" redisplay="false" escape="true"/> </p:dialog> </h:form>
内容的提问来源于stack exchange,提问作者Christian O.
相关产品推荐
相关产品推荐

