【问题标题】:RichFaces 4 notification when uploading file上传文件时的 RichFaces 4 通知
【发布时间】:2012-04-12 19:44:45
【问题描述】:

我有一个<rich:fileUpload> 组件,我想在文件因类型不允许而被拒绝时显示通知。我看到 RF 有一个 <rich:notifyMessage> 但是当文件被拒绝时我无法呈现消息。到目前为止,我有:

    <rich:fileUpload id="fileUploadComp"
                     addLabel="Agregar" clearAllLabel="Quitar todos"
                     clearLabel="Quitar" deleteLabel="Quitar"
                     doneLabel="Completado" uploadLabel="Subir archivos"
                     fileUploadListener="#{uploadBean.doUpload}"
                     acceptedTypes="txt, csv" onclear="onclear(event);"
                     noDuplicate="true">
        <a4j:ajax event="uploadcomplete" render="validationButton"/>
        <a4j:ajax event="typerejected" render="notificationFileRejected"/>
    </rich:fileUpload>

    <rich:notifyMessage for="fileUploadComp" 
                        id="notificationFileRejected"
                        sticky="true"
                        ajaxRendered="true"
                        title="Hello"/>

但是当我选择 JPEG 时,我看不到任何通知地球。

知道如何实现这一目标吗?

更新

这样做的主要思想是显示一个通知,告诉用户“文件类型不允许”之类的信息。

有什么想法吗?

【问题讨论】:

  • 出于好奇,acceptedTypes 如何适用于您的用例?上传全部内容只是为了检查文件类型似乎不利于性能优化。
  • 我认为这行不通。我认为rich:fileUpload 在上传之前会检查文件的类型。
  • rich:notifyMessage 需要消费一条消息。你检查是否确实有消息? rich:notifyMessages 应该显示它们。您也许可以通过调用创建消息的后端方法来生成消息。

标签: java jsf richfaces


【解决方案1】:

类似:

<rich:fileUpload id="fileUploadComp"
                 addLabel="Agregar" clearAllLabel="Quitar todos"
                 clearLabel="Quitar" deleteLabel="Quitar"
                 doneLabel="Completado" uploadLabel="Subir archivos"
                 fileUploadListener="#{uploadBean.doUpload}"
                 acceptedTypes="txt, csv" onclear="onclear(event);"
                 ontyperejected="ontyperejected();"
                 noDuplicate="true">
    <a4j:ajax event="uploadcomplete" render="validationButton"/>
</rich:fileUpload>

<a4j:jsFunction name="ontyperejected" actionListener="#{uploadBean.setMessage()}"/>

<rich:notifyMessage stayTime="2000" nonblocking="true"/>

用java代码:

public void setMessage() {
  String message="Wrong filetype...";
  FacesContext.getCurrentInstance().addMessage("info", new FacesMessage(FacesMessage.SEVERITY_INFO, message, message));
}

MAG, 米洛·范德泽

【讨论】:

  • 就是这样!但仍然有两件事。首先,有没有办法把那个地球放在文件上传旁边?,我希望用户能够看到它并且在右上角不那么明显----第二,当我选择一个文件并且它被拒绝时消息出现了,但是如果我再次选择了错误的文件,地球不再出现,如何解决?
  • jsFunction和后端是第二次调用吗?也许一些 CSS 可以帮助确定消息框的位置。
  • 不,Backing-bean 没有被第二次调用。选择 fileA -> 显示消息 -> 再次选择 fileA -> 无消息。另一方面,选择文件A->显示消息->选择文件B->显示消息->选择文件A->显示消息。如果我连续选择同一个文件,只会出现一个通知(支持 bean 调用一次)。
  • 那么我认为它是按设计工作的。 GUI 已经告诉用户该文件不被接受,或者它甚至没有注意到它是另一个选择。可能是将 render="fileUploadComp" 添加到 jsFunction 的选项。可能是文件上传器被重新初始化。
  • 你试过添加渲染了吗?
【解决方案2】:

虽然没有我想要的那么好,但它可以解决问题。

    <rich:fileUpload id="fileUploadComp"
                     addLabel="Agregar" clearAllLabel="Quitar todos"
                     clearLabel="Quitar" deleteLabel="Quitar"
                     doneLabel="Completado" uploadLabel="Subir archivos"
                     fileUploadListener="#{uploadBean.doUpload}"
                     acceptedTypes="txt, csv" onclear="onclear(event);"
                     ontyperejected="ontyperejected();"  //THIS IS MY TRICK
                     noDuplicate="true">
        <a4j:ajax event="uploadcomplete" render="validationButton"/>
    </rich:fileUpload>

    <script>
        var ontyperejected = function(){
            alert('Archivo inválido. Tipos permitidos: .txt y .csv');
        }
    </script>

只需创建一个 JScript 函数并发送警报消息。瞧。 不过,如果有人知道如何实现出现和消失的那个漂亮的小通知地球,我将非常感激!

【讨论】:

    猜你喜欢
    • 2011-12-23
    • 1970-01-01
    • 2011-11-02
    • 2023-03-04
    • 1970-01-01
    • 2012-04-13
    • 2012-01-15
    • 1970-01-01
    • 2014-06-16
    相关资源
    最近更新 更多