【发布时间】:2015-10-26 11:42:49
【问题描述】:
我有一个隐藏的<p:fileUpload>,它是通过<h:outputLabel> 打开的。
<p:messages id="message" autoUpdate="true" />
<h:form id="form">
<p:fileUpload id="file-input" auto="true"
allowTypes="/(\.|\/)(gif|jpe?g|png)$/" sizeLimit="10"
invalidSizeMessage="wrong size" fileUploadListener="#{bean.image}"
update="@form message" style="display: none;"
invalidFileMessage="wrong file" />
<h:outputLabel for="file-input_input">
<h:graphicImage name="images/dummy.jpg" />
</h:outputLabel>
<h:outputText value="#{bean.file.fileName}" />
<br />
<h:outputText value="#{bean.file.size}" />
</h:form>
很遗憾,验证失败后不会显示任何消息(例如大小无效或文件无效)。这些消息显示在<p:fileUpload> 内容框中,而不是在<p:messages> 中。
如何在<p:messages> 内而不是在<p:fileUpload> 内显示这些消息?
【问题讨论】:
-
@Tiny: stackoverflow.com/q/17544141
-
"是的,
指向另一个 ID。这个是必要的,否则它不会工作!" : 定义'不会工作'... 含糊其辞。为什么不解决这个问题……你说的是上传对话框?那你有 2 个文件上传吗? -
@Kukeltje:OP 对其进行了编辑以解释 Tiny 的 cmets,但这些实际上分散了真正问题的注意力,因此我将其删除以减少噪音。
-
@BalusC:我看到了编辑,但代码和文本仍然“模糊”。 fileUpload 的消息需要显示,但是fileUpload 是隐藏的,那么它是如何使用的呢?从原始文本中,我知道有 another 文件上传正在/正在使用...并且标签指向跨度内生成的 HTML 输入,这是真正的文件上传组件。所以这永远不会起作用(我认为'for'也可以省略,想知道为什么没有错误))。所以该代码仍然会分散注意力(i.m.o.)。以及文件上传是如何完成的?太模糊了,或者我完全错过了一些东西
-
:-) 您更改了评论。我确实阅读了链接,但没有看到关系。是的,标签指向实际输入,但我希望它指向组件,并且组件使它指向正确的 html 输入。所以根据我的理解,OP使用了一种“hack”来显示实际的文件上传对话框(原生对话框,而不是另一个上传的PF对话框)......现在我明白了......谈论噪音..认为我创造了一些:-(
标签: jsf file-upload primefaces