Announcement

Collapse
No announcement yet.

Richfaces DropDownMenu mit MenuItem

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Richfaces DropDownMenu mit MenuItem

    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

    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>
    Beispielcode von meinem BackingBean

    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);
           }
    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
Working...
X