【问题标题】:Unable to update outputText when a fileUpload happens发生文件上传时无法更新 outputText
【发布时间】: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 字段吗?

提前致谢,抱歉我的英语不好。 =]

【问题讨论】:

  • 如果您评论该输出文本,是否还有其他错误?这条线在工作吗&lt;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


【解决方案1】:

真正的问题是我的 outputText 的值是空的。我是通过调试页面的请求发现的:在fileUpload之后有一个响应,采用XML格式,其他消息组件包含正确的文本,span字段(outputText)也在那里,但是是空的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-25
    • 1970-01-01
    • 1970-01-01
    • 2017-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-12
    相关资源
    最近更新 更多