के साथ डेटाबेस में संग्रहीत फ़ाइल को डाउनलोड करने के लिए मुझे डेटाबेस में संग्रहीत फ़ाइल डाउनलोड करने की आवश्यकता है। मुझे लगता है कि मैंने सही ढंग से क्वेरी की है और इसे बुलाया है, मुझे नहीं पता कि मैं इसे जेएसएफ पेज में बटन से कैसे जोड़ सकता हूं। मैं भी सोच रहा हूं, क्या मुझे जेएसएफ पृष्ठ पर जाने से पहले सर्वर पर किसी फ़ोल्डर में उस छवि को सहेजना है। यदि हां, तो मैं यह कैसे कर सकता हूं? अब इसजेएसएफ 2.0
@Stateless(name = "ejbs/FileDownloaderEJB")
public class FileDownloaderEJB implements IFileDownloaderEJB {
@PersistenceContext
private EntityManager em;
public byte[] downloadGarbage(Long id) {
Query query = em.createNamedQuery("downloadGarbage");
query.setParameter("idParam", id);
Object o = query.getSingleResult();
byte[] tmpArray = (byte[]) o;
return tmpArray;
}
:
@NamedQuery(name = "downloadGarbage", query = "SELECT g.file FROM Garbage g WHERE g.id :idParam")
@Entity
public class Garbage implements Serializable {
@Lob
@Column(nullable = false)
private byte[] file;
....
यहाँ एक सरल EJB कॉल कि क्वेरी तो आईडी मिलता है:
इस क्वेरी मैं db से बाइट [] वापस जाने के लिए उपयोग करें वह हिस्सा है जो मुझे भ्रमित करता है, मैं जेएसएफ पेज और प्रबंधित बीन के साथ कैसे कर सकता हूं?
@ManagedBean
@RequestScoped
public class DownloadController {
@EJB
private FileDownloaderEJB fileDownloaderEJB;
...
private Garbage garbage;
public void startDownload(Long id) {
fileDownloaderEJB.downloadGarbage(id);
//HOW TO START THE DOWNLOAD?
//Other Get Set Methods...
}
}
मैं जेएसएफ से प्रबंधित कमांड को कमांड बटन के भीतर से उस लंबी आईडी को कैसे पास कर सकता हूं? क्या यह अनुमति है? ईएल में
<!-- How to pass the value of id from -->
<h:commandButton action="downloadController.startDownload(#{garbage.id})">
यदि सामग्री एक .doc फ़ाइल है तो ContentType क्या होना चाहिए। क्या उस विधि को कॉन्टेंट टाइप() वापस "टेक्स्ट/एक्सएमएल" या "टेक्स्ट/सादा" मिलना चाहिए? – sfrj
ओह, एक शब्द दस्तावेज़ निश्चित रूप से एक पाठ फ़ाइल नहीं है। '.doc' के लिए यह' application/msword' है और '.docx' के लिए यह' application/vnd.openxmlformats-officedocument.wordprocessingml.document' है। यदि आप फ़ाइल नाम के आधार पर इसे प्रोग्रामेटिक रूप से निर्धारित करना चाहते हैं तो आप 'ServletContext # getMimeType() 'का उपयोग कर सकते हैं। यह भी देखें http://stackoverflow.com/questions/2426773/when-do-browsers-send-application-octet-stream-as-content-type/2426952#2426952 – BalusC
धन्यवाद मैं इसे आज़मा दूंगा – sfrj