2010-07-15 13 views
7

के दौरान लोड करता है मेरे पास एक कैलेंडर, संपादक, फ़ाइल अपलोड और डेटा एक जेएसएफ फेसलेट पर डेटाटेबल प्राइमफेस नियंत्रण होता है।@ViewScoped प्रबंधित बीन कई बार पोस्टबैक

कोड इस प्रकार

<?xml version='1.0' encoding='UTF-8' ?> 
<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<ui:composition xmlns:ui="http://java.sun.com/jsf/facelets" 
       template="./../templates/masterlayout.xhtml" 
       xmlns:h="http://java.sun.com/jsf/html" 
       xmlns:p="http://primefaces.prime.com.tr/ui" 
       xmlns:f="http://java.sun.com/jsf/core"> 

    <ui:define name="title">#{lbl.SSTitle}</ui:define> 

    <ui:define name="content"> 
     <h:form> 
      <p:panel header="Upload Script"> 
       <h:outputText value="Welcome #{loginActionBean.login.emp.empName}"/> 
       <br /> 
       <p:calendar value="#{searchScriptActionBean.scheduleDate}" /> 
       <br /> 
       <p:fileUpload fileUploadListener="#{searchScriptActionBean.handleFileUpload}" 
           multiple="true" update="filsList" allowTypes="*.txt;*.init" description="Script Files"> 
       </p:fileUpload> 
       <br /> 
       <p:editor value="#{searchScriptActionBean.htmlText}" /> 
      </p:panel> 
      <p:dataTable id="filsList" value="#{searchScriptActionBean.scriptFiles}" var="file"> 

       <p:column> 
        <f:facet name="header"> 
         <h:outputText value="File Name" /> 
        </f:facet> 
        <h:outputText value="#{file.fileName}" /> 
       </p:column> 

       <p:column> 
        <f:facet name="header"> 
         <h:outputText value="Size" /> 
        </f:facet> 
        <h:outputText value="#{file.size}" /> 
       </p:column> 

       <p:column> 
        <f:facet name="header"> 
         <h:outputText value="Operation" /> 
        </f:facet> 
        <h:commandLink value="Remove"> 
         <p:collector value="#{file}" removeFrom="#{searchScriptActionBean.scriptFiles}" /> 
        </h:commandLink> 
       </p:column> 

      </p:dataTable> 
     </h:form> 
    </ui:define> 
</ui:composition> 

और @ViewScoped बीन इस प्रकार,

/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
*/ 
package com.ugam.crawler.web.script; 

import java.io.Serializable; 
import java.util.ArrayList; 
import java.util.Date; 
import java.util.List; 
import javax.faces.bean.ViewScoped; 
import javax.inject.Named; 
import org.primefaces.event.FileUploadEvent; 
import org.primefaces.model.UploadedFile; 

/** 
* 
* @author devendra.mahajan 
*/ 
@Named(value = "searchScriptActionBean") 
@ViewScoped 
public class SearchScriptActionBean implements Serializable{ 

    protected String htmlText; 
    private Date scheduleDate; 
    private List<UploadedFile> scriptFiles = new ArrayList<UploadedFile>();; 
    /** 
    * Get the value of scheduleDate 
    * 
    * @return the value of scheduleDate 
    */ 
    public Date getScheduleDate() { 
     return scheduleDate; 
    } 

    /** 
    * Set the value of scheduleDate 
    * 
    * @param scheduleDate new value of scheduleDate 
    */ 
    public void setScheduleDate(Date scheduleDate) { 
     this.scheduleDate = scheduleDate; 
    } 

    /** 
    * @return the scriptFiles 
    */ 
    public List<UploadedFile> getScriptFiles() { 
     return scriptFiles; 
    } 

    /** 
    * @param scriptFiles the scriptFiles to set 
    */ 
    public void setScriptFiles(List<UploadedFile> scriptFiles) { 
     this.scriptFiles = scriptFiles; 
    } 

    /** Creates a new instance of SearchScriptActionBean */ 
    public SearchScriptActionBean() { 
     System.out.println("In SearchScriptActionBean Constructor"); 

    } 

    public void handleFileUpload(FileUploadEvent event) { 
     //add facesmessage to display with growl 
     //application code 
     UploadedFile file = event.getFile(); 
     scriptFiles.add(file); 


    } 


    /** 
    * Get the value of htmlText 
    * 
    * @return the value of htmlText 
    */ 
    public String getHtmlText() { 
     return htmlText; 
    } 

    /** 
    * Set the value of htmlText 
    * 
    * @param htmlText new value of htmlText 
    */ 
    public void setHtmlText(String htmlText) { 
     this.htmlText = htmlText; 
    } 
} 

मेरे समस्या SearchScriptActionBean भार कई समय था जब प्रपत्र लोड और जब एक फ़ाइल अपलोड होने के है,। मैं बीन के पुराने मूल्यों को बरकरार रखना चाहता हूं। पूर्व। स्क्रिप्टफाइल (सूची), जहां अपलोड की गई फाइलें जोड़ दी गई हैं। और filsList (डेटाटेबल) अद्यतन नहीं हो रहा है।

उत्तर

12

issue 1492 जैसा दिखता है। यहां प्रासंगिकता का एक उद्धरण दिया गया है:

यह आंशिक राज्य की बचत के साथ एक चिकन/अंडा मुद्दा है। पर दृश्य को डेल्टा राज्य लागू करने से पहले निष्पादित किया गया है, इसलिए हम आपके द्वारा वर्णित व्यवहार को देखते हैं।

इस बिंदु पर, मुझे इस उपयोग के मामले को हल करने का एक स्पष्ट तरीका नहीं दिख रहा है।

वैकल्पिक हल, यदि आप दृश्य-दायरे बाइंडिंग javax.faces.PARTIAL_STATE_SAVING गलत पर स्थापित करने की जाएगी उपयोग करना चाहिए।

शायद Primefaces परोक्ष दृष्टि से अपलोड की गई फ़ाइल बाध्यकारी है और आप web.xml के लिए निम्न जोड़ने की जरूरत:

<context-param> 
    <param-name>javax.faces.PARTIAL_STATE_SAVING</param-name> 
    <param-value>false</param-value> 
</context-param> 

इसे आज़मा कर देखें और देखते हैं कि अगर मदद करता है। यदि यह काम करता है, तो आप केवल एक विशिष्ट दृश्य के लिए बंद होने पर विचार करना चाहेंगे। आंशिक रूप से आंशिक राज्य की बचत को बंद करना अर्थात् राज्य बचत पद्धति के आधार पर स्मृति और/या बैंडविड्थ उपयोग को ध्यान में रखेगा। यह मानते हुए कि दृश्य आईडी /upload.xhtml है, इस का उपयोग करें:

<context-param> 
    <param-name>javax.faces.FULL_STATE_SAVING_VIEW_IDS</param-name> 
    <param-value>/upload.xhtml</param-value> 
</context-param> 

आप अर्धविराम द्वारा कई दृश्य आईडी निर्दिष्ट कर सकते हैं।

+0

यह मेरे लिए काम किया! धन्यवाद ! – jruillier

+0

मैं अपने ऐप में विचारों का उपयोग नहीं कर रहा हूं, लेकिन प्राइमफेस फोरम यूआरएल, http://forum.primefaces.org/viewtopic.php?f=3&t=29524 में इस स्टैक ओवरफ्लो प्रश्न का संदर्भ दिया। वाह, एक बलुस जवाब? हमेशा की तरह, बलुस दिन बचाता है !!! – Howard