SO istendiği gibi iş akışı çalışır Genelde How to provide a file download from a JSF backing bean?Dosya akışı nasıl yapılır ve bir JSF karşı karşıya mesaj gönderir? Biz prosedür takip eden kullanıcılara bir ikili dosya akışı vardır
sorgulamaya detaylandırılır fakat verilen dosyaların oluşturma sırasında kazanılabilir hatalar meydana gelebilir ve istediğimiz Bunları kullanıcıya bir uyarı olarak görüntülemek için Dosya bu durumda yine de oluşturulmalıdır. Dolayısıyla, bu dışa aktarma işleminin ve görüntü yüzleri iletilerine devam etmesini istiyoruz.
Sadece bunu vurgulamak için: Evet, verilerle ilgili bir sorun yok, ancak kullanıcılarımız ihracatın devam etmesini ve bu hatalı dosyayı almasını istiyorlar. Ardından, dosyaya bir göz atmak, satıcıyla iletişim kurmak ve kusurla ilgili bir mesaj göndermek istiyorlar.
Her durumda bitirmek için dışa aktarma ihtiyacım var.
Ama bizim istediğimiz gibi çalışmıyor. Yaklaşımımızı göstermek için basitleştirilmiş bir örnek oluşturdum. Alternatif olarak, mesajları tutacak ve ihracattan sonra gösterecek bir Bean'i düşünmekteyiz. Ama muhtemelen bunu başarmak için JSF yerleşik mekanizmaların bir yolu var.
Kontrolör
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.OutputStream;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import org.apache.tomcat.util.http.fileupload.util.Streams;
@ManagedBean
@RequestScoped
public class ExportController {
public void export() {
FacesContext fc = FacesContext.getCurrentInstance();
ExternalContext ec = fc.getExternalContext();
byte[] exportContent = "Hy Buddys, thanks for the help!".getBytes();
// here something bad happens that the user should know about
// but this message does not go out to the user
fc.addMessage(null, new FacesMessage("record 2 was flawed"));
ec.responseReset();
ec.setResponseContentType("text/plain");
ec.setResponseContentLength(exportContent.length);
String attachmentName = "attachment; filename=\"export.txt\"";
ec.setResponseHeader("Content-Disposition", attachmentName);
try {
OutputStream output = ec.getResponseOutputStream();
Streams.copy(new ByteArrayInputStream(exportContent), output, false);
} catch (IOException ex) {
ex.printStackTrace();
}
fc.responseComplete();
}
}
MTU Sayfa aslında bir dosya indirme tepkisi yapmakta olduğunuz ve iletiniz eklenecek için MTU biri bu mümkün değil bir değil beri
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui">
<f:view contentType="text/html">
<h:body>
<h:form prependId="false">
<h:messages id="messages" />
<h:commandButton id="download" value="Download"
actionListener="#{exportController.export()}" />
</h:form>
</h:body>
</f:view>
</html>
+1. –
'org.apache.tomcat.util.http.fileupload.util.Streams', Tomcat'a özgüdür. – BalusC