2011-08-28 9 views
5

पी के साथ डेटाटेबल: पी से दायर किया गया लोड: व्यूस्पेड प्रबंधित बीन काम के साथ डेटाटेबल। यह तैयार तरीकों को कॉल करता है और दो बार मिलता है। मैंने जिन तरीकों का उल्लेख किया है, उनमें पहली बार तालिका से पहली फ़ाइल सेट की गई है, और विधियों की दूसरी कॉल में यह सही फ़ाइल सेट करता है, लेकिन यह हमेशा केवल पहले डाउनलोड करता है और दूसरा डाउनलोड कभी नहीं होता है।प्राइमफ़ेस समस्या: पी: पी से दायर किया गया लोड: व्यूस्पेड प्रबंधित बीन

यह दो बार क्यों कॉल करता है? यह टेबल से पहली फाइल क्यों सेट करता है? कोई विचार? तो

private StreamedContent file; 
private InputStream stream; 

public void prepareFile(OfferAttachment attachment){ 
    System.out.println("Attachment: "+attachment.getName()); 
    stream = new ByteArrayInputStream(attachment.getAttachment()); 
    file = new DefaultStreamedContent(stream, "text/plain", attachment.getName()); 
    stream = null; 
} 

public StreamedContent getFile() { 
    System.out.println("File: "+file.getName()); 
    return file; 
} 

public void setFile(StreamedContent file) { 
    this.file = file; 
} 

, मैं एक साधारण पी के साथ एक समाधान बनाया:

यहाँ मेरी कोड है:

<p:dataTable id="offer_attachment_datatable" 
        widgetVar="offer_attachment_datatable" 
        var="attachment" 
        value="#{offerBean.offerAttachments}"> 
      <p:column> 
       <f:facet name="header"/> 
       <p:commandLink ajax="false" actionListener="#{offerBean.prepareFile(attachment)}" title="#{attachment.name}"> 
        <p:graphicImage value="/resources/themes/navigator_b2e/images/drive-download.png" /> 
        <p:fileDownload value="#{offerBean.file}"/> 
       </p:commandLink> 
      </p:column> 
</p:dataTable> 

और प्रबंधित सेम में (सरलीकृत) confirmDialog जहाँ मैं समस्याग्रस्त ajax निकाला = false कमांड लिंक, इसलिए मैं इसे पी: डेटाटेबल पर क्लिक करके अटैचमेंट का चयन करता हूं और पी: confirmdialog से डाउनलोड निष्पादित करता हूं।

+0

मैंने पंक्ति इंडेक्स को af: param के रूप में पारित करने का भी प्रयास किया है, लेकिन यह हमेशा एक ही पंक्ति भेजता है इंडेक्स: केवल पहले क्लिक किया गया। मुझे लगता है कि समस्या इस AJAX = झूठी के आसपास हो सकती है, लेकिन मुझे यकीन नहीं है ... मैं प्राइमफेस 2.2.1 का उपयोग कर रहा हूं। और ग्लासफ़िश 3.1 – d1van

+0

अब ऐसा लगता है कि बीन नष्ट हो गया है। यह सही फ़ाइल डाउनलोड करता है, लेकिन जब मैं उसके बाद कुछ कार्रवाई करने की कोशिश करता हूं, तो मुझे 'SEVERE: com.sun.faces.mgbean.ManagedBeanCreationException: प्रबंधित बीन ऑफ़र पर संसाधन इंजेक्शन करने में त्रुटि हुई है। – d1van

उत्तर

1

मुझे 2.2.1 में एक ही समस्या थी। मुझे p:commandLink को p:commandButton को उसी विशेषता के साथ बदलकर समाधान मिला। लगता है कि यह commandLink घटक

0

समाधान है कि मेरे लिए काम किया के व्यवहार के साथ संबंधित एक बग को बदलने के लिए था कि "p: datatable" के साथ "ui: दोहराने (facelets) और तालिका", इस तरह:

<table role="grid"> 
<thead> 
    <tr role="row"> 
     <th>File Name</th> 
     <th>Action</th> 
    </tr> 
</thead> 
<tbody> 
    <ui:repeat value="#{downloadFileBean.files}" var="f"> 
     <tr role="row"> 
      <td><h:outputText value="#{f.name}" /></td> 
      <td> 
       <p:commandLink id="download" ajax="false"> 
        <h:outputText value="Download" /> 
        <p:fileDownload value="#{downloadFileBean.file}" /> 
        <f:param name="fileName" value="#{f.name}" /> 
       </p:commandLink> 
      </td> 
     </tr> 
    </ui:repeat> 
</tbody> 

संबंधित मुद्दे