【问题标题】:Render p:commandButton after uploading a file p:fileUpload上传文件后渲染 p:commandButton p:fileUpload
【发布时间】:2011-12-21 16:38:52
【问题描述】:

我有一个带有 p:fileUploadp:commandButton 的页面,第一次访问该页面时,该按钮应该被隐藏,并且在文件上传之后应该呈现按钮。我的代码如下所示,有什么想法可以实现吗?

    <h:form enctype="multipart/form-data" >

        <p:fileUpload
            fileUploadListener="#{fileUploadController.handleFileUpload}"
            mode="advanced"
            multiple="true"
            sizeLimit="2000000000"
            allowTypes="/(\.|\/)(txt|csv)$/"
            required="true"
            label="Seleccionar"
            uploadLabel="Subir a servidor"
            cancelLabel="Cancelar">
        </p:fileUpload>

        <p:commandButton id="btnValidar" value=" Validar "
                         rendered="#{fileUploadController.btnRendered}"
                         style="margin-left: 430px;"/>

    </h:form>

【问题讨论】:

    标签: jsf button file-upload rendering primefaces


    【解决方案1】:

    只需像在所有其他 PrimeFaces ajax 组件上一样使用update 属性。

    <p:fileUpload update="@form" />
    

    我当然假设您已在 handleFileUpload 方法中将 btnRendered 设置为 true

    请注意,您不能将其设置为按钮本身的 ID,因为当 btnRendered 默认为 false 时,它不存在于 HTML DOM 树中。即 JavaScript 根据检索到的 Ajax 响应在 HTML DOM 树中执行更新工作。如果您想单独更新按钮而不是表单,则将其包装在另一个组件中,该组件始终存在于 HTML DOM 树中:

    <h:panelGroup id="btnValidar">
        <p:commandButton rendered="#{fileUploadController.btnRendered}" />
    </h:panelGroup>
    

    并更新如下

    <p:fileUpload update="btnValidar" />
    

    另见:

    【讨论】:

    • 感谢@BalusC 再次救了我哈哈。我的方向是正确的,只是我忘记了关于 HTML DOM 树的事情。谢谢。
    • 只是另一个问题...当我在 update 属性中添加 @form 时,即使我选择了 2 个或更多,它也只会上传 1 个文件。有什么想法吗?
    • 算了!我解决了。我认为使用@form 会刷新p:fileUpload,因此在第一次上传完成后它会被清除。我使用了h:panelGroup 的选项,现在效果很好!还是谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-22
    • 2014-05-21
    • 1970-01-01
    • 1970-01-01
    • 2013-01-03
    • 2021-09-20
    • 1970-01-01
    相关资源
    最近更新 更多