2008-11-13 10 views
2

Comment puis-je mettre des informations dans un flux de sortie de tapestry5?Comment puis-je mettre des informations dans un flux de sortie de tapestry5?

J'ai besoin d'une page lorsqu'un utilisateur saisit une boîte de dialogue pour enregistrer ou ouvrir le fichier avec les informations de sortie.

Je Recopiez le code suivant:

public class Index {

@Inject 
private RequestGlobals requestGlobals; 

@OnEvent("activate") 
public void onActivate() { 
    try { 
     HttpServletResponse response = requestGlobals.getHTTPServletResponse(); 
     response.setContentType("text/txt"); 
     PrintWriter out = response.getWriter(); 
     out.println("hellooooooo"); 
     out.flush(); 
    } catch (IOException ex) { 
     Logger.getLogger(Index.class.getName()).log(Level.SEVERE, null, ex); 
    } 
} 

}

J'espère que le résultat est que "helloooooooo" mais est ("helloooooooo" + mon HTML brut page)

Répondre

1

Si vous traitez avec de grands flux de réponse, en utilisant StreamResponse peut être un peu gênant et inefficace (parce que vous devez retourner un InputStream). Mieux serait d'écrire la réponse directement à OutputStream.

Heureusement, dans Tapestry Wiki, il y a une page pour résoudre exactement ceci: Tapestry5: How To Create A Component Event Result Processor.

+0

Cette solution est la meilleure si vous voulez éviter d'écrire votre fichier côté serveur avant de l'envoyer au client. Mais la solution sur l'exemple de Tapestry nécessite un correctif: la fermeture de 'OutputStream' doit être faite dans le bloc' finally'. Nous pouvons également utiliser 'IOUtils.closeQuietly (out);' (à partir d'apache) pour fermer 'OutputStream' sans avoir besoin d'un try ... catch. – vdubus

+0

Cela se fait dans le bloc 'finally'. En fait, cela se fait deux fois: dans le bloc 'try' et dans le bloc' finally' (juste enfin bloquer suffit). –