Hi @ll,
ich hoffe ihr könnt mir helfen. Ich arbeite mit Richfaces und habe ein DropDownMenu mit einem MenuItem.
Ziel soll es sein das ich beim anklicken eine Datei runterladen kann
Beispielcode von meinem BackingBean
Wenn ich jetzt suboption 1 anklicke kann ich die Datei test.pdf runterladen, wenn ich suboption 2 anklicke sollte er hier z.b. keine Datei runterladen, das Problem ist aber das wenn ich suboption 2 anklicke mir event.getComponent().getId().toString().equals("su b1" ) auch true liefert und ich weiß nicht warum. Wenn ich beim 1. klick suboption 2 anklicke liefert er falsch, was ja auch richtig ist, allerdings klicke ich wieder suboption 1 an, bietet er mir das pdf an, beim klick auf suboption 2 die gleiche Datei, das soll er aber nicht.
Kann mir jemand weiterhelfen ?
grüße
chefkoch
ich hoffe ihr könnt mir helfen. Ich arbeite mit Richfaces und habe ein DropDownMenu mit einem MenuItem.
Ziel soll es sein das ich beim anklicken eine Datei runterladen kann
Code:
<h:form> <rich:dropDownMenu value="DropDown Test" direction="bottom-right"> //hier will ich beim klicken von suboption 1 eine Datei runterladen <rich:menuItem value="suboption 1" immediate="true" target="_blank" id="sub1" actionListener="#{docBean.download}"> </rich:menuItem> //und hier auch, natürlich eine andere <rich:menuItem value="suboption 2" immediate="true" target="_blank" id="sub2" actionListener="#{docBean.download}"/> </rich:dropDownMenu> </rich:dropDownMenu>
Code:
public void download(ActionEvent event) { if ( event.getComponent().getId().toString().equals("sub1" ) ) { //jetzt soll die Datei runtergeladen werden. try { File f = new File("C:/Downloads/test.pdf"); InputStream in = new BufferedInputStream(new FileInputStream(f)) ; HttpServletResponse resp =(HttpServletResponse)FacesContext.getCurrentInstance().getExternalContext().getResponse(); resp.reset(); resp.setContentLength(in.available()); resp.setContentType("application/pdf"); resp.setHeader("pragma", "no-cache"); resp.setHeader("Cache-control","no-cache, no-store, must-revalidate") ; resp.setHeader("Content-Disposition", "attachment;filename=\"" + f.getName() ) ; output = new BufferedOutputStream(resp.getOutputStream()); int read = 0 ; while ( (read = in.read() ) != -1) { output.write(read) ; } output.flush(); if(!FacesContext.getCurrentInstance().getResponseComplete() ) { System.out.println("Response nicht fertig, erzwingen"); FacesContext.getCurrentInstance().responseComplete(); } }catch(IOException e) { System.err.println( e); }
Kann mir jemand weiterhelfen ?
grüße
chefkoch