2012-10-03 6 views
5

मैं प्राइमफ़ेस 3.4 का उपयोग कर रहा हूं और इन-सेल संपादन के साथ डेटा-टेबल निर्यात करने का प्रयास कर रहा हूं। यह काम नहीं लग रहा है।प्राइमफ़ेस 3.4 डेटा एक्सपोर्टर मूल्यों को निर्यात नहीं करता है p: cellEditor

मैंने किया है निम्नलिखित:

संशोधित org.primefaces.component.export.Exporter लाइन 143 और कहा कि इस:

else if (component instanceof CellEditor) { // Handle in-cell editable datatables 
    return exportValue(context, ((CellEditor) component).getFacet("output")); 
} 

यह वास्तविक कोशिकाओं के सही करने के लिए शीर्ष पर एक अतिरिक्त पंक्ति के साथ-साथ एक अतिरिक्त स्तंभ खड़ी कर रहा है डेटा के साथ। एक्सेल फ़ाइलों के साथ यह ठीक है क्योंकि वे "दृश्यमान" नहीं हैं लेकिन पीडीएफ खराब दिखता है।

  1. क्या पीएफ 3.4 को स्रोत कोड बदलने के बिना इसका समर्थन करने का कोई तरीका है?
  2. यदि उपरोक्त का उत्तर नकारात्मक है, तो क्या मैं अतिरिक्त पंक्ति/कॉलम के बिना पीडीएफ उत्पन्न कर सकता हूं?

उत्तर

5

इस स्रोत कोड को बदले बिना पीएफ 3.4 समर्थन करने के लिए एक तरीका है?

नहीं। आपने अपने कस्टम Exporter कार्यान्वयन/ओवरराइड प्रदान करने के लिए। मैंने पहले ही यह कई महीने पहले issue 4013 के रूप में रिपोर्ट की है। यह न केवल CellEditor का उल्लेख करता है, बल्कि HtmlGraphicImage (हम बूलियन राज्यों को दिखाने के लिए छवियों का उपयोग कर रहे हैं, जिनके alt हम पीडीएफ/एक्सएमएल/एक्सएलएस/सीएसवी रिपोर्ट में दिखाना चाहते हैं)।

आप जो भी कर सकते हैं उसके लिए वोट देना है ताकि उम्मीद है कि यह अधिक ध्यान दे, या इसे PF forum पर फिर से पूछकर।


यदि उपरोक्त का जवाब नकारात्मक है, मैं पीडीएफ अतिरिक्त पंक्ति/स्तंभ के बिना उत्पन्न हो कर सकते हैं?

आप exportable="false" विशेषता सेटिंग से निर्यात से एक स्तंभ छुपा सकते हैं।

<p:column exportable="false"> 
+0

आपके उत्तर के दूसरे भाग के बारे में, यह बहुत अच्छा है और अतिरिक्त कॉलम हटा दिया गया है, लेकिन मुझे नहीं पता कि तालिका के शीर्ष पर पीडीएफ का उपयोग करते समय मुझे खाली पंक्ति क्यों है। उपरोक्त केरेम का उत्तर बताता है कि हेडर टेक्स्ट समर्थित नहीं है। क्या इस वजह से पंक्ति है? – javaMS

3

इस स्रोत कोड को बदले बिना पीएफ 3.4 समर्थन करने के लिए एक तरीका है?

हां। वर्कअराउंड

अपने कॉलम की दो प्रतियां बनाएं। पहला उपयोगकर्ताओं के लिए और दूसरा एक डेटा एक्सप्लोरर के लिए है।

पहले कॉलम में exportable="false" सेट करके, इसे डेटा एक्सप्लोरर से छुपाएं।

दूसरे कॉलम में style="display: none" सेट करके, इसे उपयोगकर्ताओं से छुपाएं।

जिस तरह से डेटा एक्सप्लोरर हेडर टेक्स्ट का समर्थन नहीं करता है, इसलिए यदि आपको अपने हेडर की आवश्यकता है तो निर्यात किया गया आपको पुरानी शैली <f:facet name="header"> का उपयोग करना होगा।

<p:column headerText="CLOSE DATE" exportable="false"> 
    <p:cellEditor> 
     <f:facet name="output"> 
      <h:outputText value="#{sale.closedate}"/> 
     </f:facet> 
     <f:facet name="input"> 
      <h:inputText value="#{sale.closedate}"/> 
     </f:facet> 
    </p:cellEditor> 
</p:column> 

<p:column style="display: none"> 
    <f:facet name="header"> 
     CLOSE DATE 
    </f:facet> 
    <h:outputText value="#{sale.closedate}"/> 
</p:column> 

लेकिन इस वैकल्पिक हलसादा बदसूरत है और अपने DataTable आकार में दो बार बना देता है और कठिन रेंडर करने के लिए।

जैसा कि बलुससी ने उल्लेख किया है कि हमें इस मुद्दे के बारे में जागरूकता बढ़ाने की आवश्यकता है ताकि वे अपने मंच में मतदान या पोस्ट कर सकें।

+0

उत्तर के लिए धन्यवाद। दुर्भाग्य से मैं इस बात पर विचार नहीं करता कि मेरे पास हर पृष्ठ में डबल टेबल बनाए रखने में अपेक्षाकृत बड़ी मात्रा में काम करने के कारण चीजों को करने का एक अच्छा तरीका है। आपके द्वारा वर्णित डिजाइन-परिप्रेक्ष्य का उल्लेख न करें। – javaMS

0

जवाब है ...

सेल संपादक के साथ डेटा तालिका बनाने .... और बाद कोई सेल संपादक के साथ एक अन्य टेबल बना लेकिन एक

में एक ही क्षेत्रों निर्यातक होना चाहिए दूसरी तालिका के संदर्भ में, और यह है! : डी

बधाई!

1

एकमात्र समाधान जो मैंने पाया है, वह है अपनी खुद की कक्षा बनाना जो निर्यातक को बढ़ाता है और protected String exportValue(FacesContext context, UIComponent component) विधि को ओवरराइड करता है। आपको केवल else if (component instanceof CellEditor) { return exportValue(context, ((CellEditor) component).getFacet("output")); }