0

PrimeFacesfileUploadを複数のアップロードオプションとともに使用しています。私のプロジェクトでは、画像のアップロード中にメール通知を送信したいと思います。私の問題は、10枚の画像をアップロードすると、同時に10通のメール通知が送信されることを意味します。10枚の画像をアップロードする際にメール通知を1つだけ送信したい。私はprimefaces3.0とjsf2.0を使用しています。どうすれば解決できますか?

私のjsfページ:

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

バッキングビーン:

    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);
4

1 に答える 1

5

ファイルアップロードハンドラメソッドがコレクション内のアップロードされたすべてのファイルをキャプチャして記憶するだけになるように、Beanを再設計します。次に、フォームの下に[保存]ボタンを追加します。このボタンは、アップロードされたすべてのファイルを実際に処理して保存し、最後にメールを送信するアクションメソッドにバインドされています。Beanをビュースコープに配置すると、エンドユーザーが同じビューを操作している限り、1つの同じ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}" />
于 2012-06-19T13:59:32.613 に答える