【发布时间】:2018-08-07 08:19:23
【问题描述】:
我正在使用 primefaces 6 并想编写一个包含多个文件上传字段的表单。这将是动态的:有时会有 6 个字段,有时只有 2 个,有时是 29 个(!)。
在每次文件上传后,我有一个 outputText 来显示已上传文件的名称(如果已上传)。发生文件上传时,我的消息和咆哮组件已成功更新,但不是 outputText 字段(确切地说是具有动态 id 的字段)。我怎样才能解决这个问题?我已经尝试更新 outputText 字段、母亲 h:panelGroup 和 p:panelGrid。我认为我的动态 id 解决方案行不通。
<c:forEach items="#{myBean.myList}" var="tipoArq" varStatus="varStatus">
<p:panelGrid id="#{'panelGroupArquivo'.concat(tipoArq.ordem)}">
<div style="overflow: hidden; margin-bottom: 5px;">
<p:fileUpload id="#{'arquivo'.concat(tipoArq.ordem)}"
fileUploadListener="#{myBean.uploadSomeFile}"
mode="advanced"
update="#{'nomeArquivo'.concat(tipoArq.ordem)} messages :form:growl"
auto="true"
sizeLimit="#{tipoArq.tipoArqAnual.maxSize}"
allowTypes="/(\.|\/)(pdf)$/"
style="width: 500px;" required="true">
<f:attribute name="idTipoArquivoAnualTipoUg" value="#{tipoArq.id}" />
</p:fileUpload>
</div>
<h:outputText id="#{'nomeArquivo'.concat(tipoArq.ordem)}"
value="#{myBean.getFileNameByOrdem(tipoArq.ordem)}" style="margin-right: 5px;"/>
</p:panelGrid>
<br/>
</c:forEach>
我尝试在更新属性中使用以下语法:
-
{'nomeArquivo'.concat(tipoArq.ordem)}
-
{':form:nomeArquivo'.concat(tipoArq.ordem)}
-
{'form:nomeArquivo'.concat(tipoArq.ordem)}
-
{'panelGroupArquivo'.concat(tipoArq.ordem)}
-
{':form:panelGroupArquivo'.concat(tipoArq.ordem)}
-
{nomeArquivo.concat(tipoArq.ordem)}(在 cmets 中推荐)
此 panelGrid 最初是一个 h:panelGroup,尝试更新它没有成功。 还有其他方法可以向 p:fileUpload 指示我希望它更新他旁边的 outputText 字段吗?
提前致谢,抱歉我的英语不好。 =]
【问题讨论】:
-
如果您评论该输出文本,是否还有其他错误?这条线在工作吗
<p:fileUpload id="#{'arquivo'.concat(tipoArq.ordem)}"? -
nomeArquivo是一个变量吗?试试#{nomeArquivo.concat(tipoArq.ordem)} -
嗨@TomBrito,很抱歉耽搁了这么多时间。如果我取消“更新”,一切正常。 IE: update="messages :form:growl" 工作正常,但是当我添加动态 id 时,它说找不到组件。
-
看看客户端ID到底是什么(提示:你不能这样设置动态ID!只能在c:foreach循环中)
-
你进一步调试了什么?试过开发模式?检查请求/响应?错误日志?添加了消息组件?如果找不到更新,则通常是显式错误
标签: jsf primefaces