【问题标题】:Multiple Image upload in primefacesprimefaces中的多个图像上传
【发布时间】:2012-06-21 08:35:27
【问题描述】:

我正在使用带有多个上传选项的 PrimeFaces fileUpload。在我的项目中,我想在图像上传期间发送电子邮件通知。我的问题是当我上传 10 张图片时,意味着同时发送了 10 封电子邮件通知。我想在上传 10 张图片时只发送一封电子邮件通知。我正在使用 primefaces 3.0 和 jsf 2.0。我该如何解决?

我的 jsf 页面:

     <p:fileUpload id="imaload" fileUploadListener="#{photoUploadAction.handleImage}"  
                           mode="advanced"  multiple="true" process="@form" 
                          update="messages,@form" 
                           allowTypes="/(\.|\/)(gif|jpe?g|png)$/"/>  

支持 Bean:

    public void handleImage(FileUploadEvent event) throws IOException, EmailException {
       try {
            photoUploadVO.setDisabled("false");

            //BufferedImage image = ImageIO.read(in);
            ImageIO.write(resize(bufferedImage, 400,  bufferedImage.getHeight()), "jpg", new File(tmpFile));
            flag = photoUploadDaoService.uploadPhotos(photoUploadVO);

            // profileImageService.uploadPhotos(profileImageBean);
            if (flag == true) {

                if(!loginBean.getType().equals("ngo") && !loginBean.getType().equals("admin") &&
                         !loginBean.getType().equals("ngo_coordinator") ){

                     volName = getVolunteerName(photoUploadVO.getUsrId(),photoUploadVO.getUser_type());

                 lst = apDao.retreiveSetup();
                   notification = lst.get(0).activity_email.toString();
                    email = lst.get(0).approval_toEmail.toString();

                    if(notification.equalsIgnoreCase(tmp)){
                          ecs.sendPhotoNotiFication(email,photoUploadVO,volName);
                    }
                 }

                FacesMessage msg = new FacesMessage("Successfully Uploaded");

                FacesContext.getCurrentInstance().addMessage(null, msg);
            } else {
                FacesMessage msg = new FacesMessage("Failure", event
                        .getFile().getFileName() + " to uploaded.");

                FacesContext.getCurrentInstance().addMessage(null, msg);
            }

        } catch (IOException e) {
            e.printStackTrace();

            FacesMessage error = new FacesMessage(
                    FacesMessage.SEVERITY_ERROR,
                    "The files were not uploaded!", "");
            FacesContext.getCurrentInstance().addMessage(null, error);
        }
    }

    This is my email notification method inside handle upload methos:

     ecs.sendPhotoNotiFication(email,photoUploadVO,volName);

【问题讨论】:

  • 不要在 handleFileUpload 事件中包含电子邮件逻辑。使 bean 具有视图范围并在提交表单时发送一封电子邮件。你应该在 bean 中有一个上传图片的列表,这样你就知道上传了多少。

标签: jsf-2 primefaces


【解决方案1】:

重新设计您的 bean,以便文件上传处理程序方法仅捕获并记住某个集合中的所有上传文件。然后在表单下方添加一个“保存”按钮,该按钮绑定到一个操作方法,该方法将实际上处理并保存所有上传的文件并最终发送邮件。如果您将 bean 放在视图范围内,那么只要最终用户与同一个视图交互,就会重用同一个 bean 实例。然后,您可以在集合属性中收集上传的文件。

类似这样的:

@ManagedBean
@ViewScoped
public class Bean implements Serializable {

    private List<UploadedFile> uploadedFiles;

    @PostConstruct
    public void init() {
        uploadedFiles = new ArrayList<UploadedFile>();
    }

    public void upload(FileUploadEvent event) {
        uploadedFiles.add(event.getFile());
    }

    public void save() {
        for (UploadedFile uploadedFile : uploadedFiles) {
            // Process them all here.
        }

        // Send only one email.
    }

}

<p:fileUpload ... fileUploadListener="#{bean.upload}" />
<p:commandButton value="Save" action="#{bean.save}" />

【讨论】:

  • 但我在高级模式下使用 。这是我的 jsf ui 页面。
  • 是的,你已经说过了。你现在到底是什么问题?你不知道怎么添加按钮吗?
  • 好吧。但是我在 handleImage 方法中放了一个电子邮件通知方法,我上传了 5 张图片意味着它会同时上传并发送 5 封电子邮件
  • 是的,我了解您的问题。上传所有图像后,您只想发送一封邮件。我已经回答了如何解决这个问题。你现在到底是什么问题?答案到底有多不清楚/不充分?您究竟是如何未能相应地实施答案的?
  • 确定如何使用带有多个选项的 p:fileUpload 标签在高级模式下添加按钮
猜你喜欢
  • 2012-04-02
  • 1970-01-01
  • 2017-05-05
  • 2011-12-29
  • 2019-06-13
  • 2013-07-10
  • 1970-01-01
  • 1970-01-01
  • 2016-05-23
相关资源
最近更新 更多