0

倍数のprimefacesfileUploadとfileUploadListenerメソッドを使用しています。リスナーは、アップロードされたファイルごとに呼び出されます。各ファイルをarrayListに格納し、最後にアップロードされた後、リストをループしてデータベースに格納します。

私のマネージドBeanはviewScopedですが、アップロードを保存するための静的arrayListがあれば大丈夫ですか、それともこれを処理するためのより良い方法がありますか?

フェイスレット

    <p:fieldset legend="Info">
       <p:selectOneRadio id="newold" value="#{newmailer.selectedCompStatus}">  
            <f:selectItem itemLabel="Existing Company" itemValue="exist" />  
            <f:selectItem itemLabel="New Company" itemValue="new" />   
            <p:ajax  listener="#{newmailer.setComp}" event="valueChange" update="main" execute="@all" />
       </p:selectOneRadio>  

       <p:panelGrid columns="2" styleClass="Grid" style="margin-bottom:10px" cellpadding="5" rendered="#{newmailer.exist}">    
                <h:outputLabel value="Company"  id="Company" />
                <p:selectOneMenu value="#{newmailer.selectedComp}" id="companies"  label="Company">
                    <f:selectItem itemLabel="Choose Company" itemValue="" />  
                    <f:selectItems value="#{mailerInfo.companies}" var="comp" />
                    <p:ajax  listener="#{demo.getCompanyMailer}" event="valueChange"  execute="@all" />
                </p:selectOneMenu> 
        </p:panelGrid>
        <p:panelGrid  id="newPanel" styleClass="Grid"  columns="2" style="margin-bottom:10px" cellpadding="5" rendered="#{!newmailer.exist and newmailer.showInfo}"> 
            <h:outputLabel value="Company"  id="Company2" />   
            <p:inputText id="newCompany" value="#{newmailer.selectedComp}" immediate="true"> 
                <f:ajax event="change"/>                
            </p:inputText>
        </p:panelGrid>

        <p:panelGrid styleClass="Grid" columns="2" style="margin-bottom:10px" cellpadding="5" rendered="#{newmailer.showInfo}">    
            <h:outputLabel value="Mailer Id"  />   
            <p:inputText id="mailerId" value="#{newmailer.mailerId}" immediate="true">
                <f:ajax event="change"/> 
            </p:inputText>
        </p:panelGrid>

    </p:fieldset>
    <p:fieldset legend="Status" rendered="#{newmailer.showInfo}">                             
        <p:selectOneRadio id="status"  value="#{newmailer.status}" immediate="true">  
            <f:selectItem itemLabel="Active" itemValue="A" />  
            <f:selectItem itemLabel="Inactive" itemValue="I" />   
            <f:ajax event="change"/>
        </p:selectOneRadio>  

    </p:fieldset>
    <p:fieldset legend="Description" rendered="#{newmailer.showInfo}">
        <p:inputTextarea rows="5" cols="30" value ="#{newmailer.desc}" counter="counter" maxlength="10"       
            counterTemplate="{0} characters remaining." autoResize="false" immediate="true">
            <f:ajax event="change"/>
        </p:inputTextarea>        
    </p:fieldset>
    <p:fieldset legend="Load Image" rendered="#{newmailer.showInfo}"> 
        <p:fileUpload fileUploadListener="#{newmailer.handleFileUpload}"  
            mode="advanced"   
            update="messages"  
            sizeLimit="100000"   
            allowTypes="/(\.|\/)(gif|jpe?g|png|pdf)$/"
            process="@form"
            multiple="true"

        />  
    </p:fieldset>
    <p:growl id="messages" showDetail="true"/>  

</p:panelGrid>
 <!--  <p:commandButton value="Submit" type="sumbit" action="#{newmailer.submit}" ajax="false"/>-->


</h:form>

 @ViewScoped
 @ManagedBean(name="newmailer")
 public class NewMailerBean implements Serializable{

private String status;
private String compStatus;
private String selectedCompStatus;
private String selectedComp;
private String mailerId;
private String desc;
private boolean exist;
private boolean showInfo;
public static Mailer mail;
public static boolean multi=false;
public ArrayList<byte []> images = new ArrayList<byte []>();

    public void handleFileUpload(FileUploadEvent event) {  



        Mailer mail = new Mailer(); 
        mail.setCompany(selectedComp);
        mail.setDesc(desc);
        mail.setMailerId(mailerId);
        mail.setStatus(status);
        mail.setUserId("test");

     try{

         InputStream inputStream = event.getFile().getInputstream();
         ByteArrayOutputStream out=new ByteArrayOutputStream(1024);

         int read = 0;
         byte[] bytes = new byte[1024];

         while ((read = inputStream.read(bytes)) != -1) {
             out.write(bytes, 0, read);
         }

         byte[] bytearray = out.toByteArray();
         inputStream.close();
         out.flush();
         out.close();

         images.add(bytearray);
         mail.setImg(bytearray);


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

1 に答える 1

1

静的変数はクラスレベルであるため、同じクラスのすべてのインスタンス間で共有され、アプリケーション全体のグローバル変数のように動作します。Web アプリケーションのすべての訪問者は、まったく同じ変数を共有します。すべての訪問者のアップロードされたすべてのファイルは、すべての訪問者に順番に表示される同じリストに配置されます。

これはあなたが本当に欲しいものですか?

私はそうは思わない。まったく静的変数にしないでください。修飾子を削除するstaticと、ビュー スコープの Bean がすべて設定されます。ビュー スコープの Bean は、同じビューを ajax で操作している限り存続します。

以下も参照してください。

于 2012-09-25T19:43:26.680 に答える