2009-02-17 6 views
3

J'ai créé une classe MyClass qui a l'intention de sortir une grande quantité de texte vers une page JSP. Plutôt que d'avoir l'objet MyClass retourner une chaîne à afficher sur la page, j'ai pensé que ce serait une meilleure idée pour l'objet MyClass d'utiliser le flux de sortie de la page. Est-ce une bonne/idée possible?Transmettre le flux de sortie JSP à une méthode

Dans les tests façons de le faire ...

Ces sortie le texte, mais il affiche avant que le corps de la page:

response.getWriter().append("test1"); 
response.getWriter().println("test2"); 
response.getWriter().write("test3"); 

Cette erreur et me dit que le flux de sortie était déjà obtenu:

response.getOutputStream().println("test4"); 

Répondre

9

response.getWriter() vous donnera un éditeur différent de celui utilisé dans JSP. Si vous voulez écrire sur le même auteur que la page JSP, vous devez utiliser la variable out depuis la page JSP. La différence est que JSP utilise la mise en mémoire tampon au-dessus de la norme response.getWriter(). C'est pourquoi vous voyez vos données écrites au response.getWriter() avant le corps JSP.

Vous ne pouvez pas mélanger response.getWriter() et response.getOutputStream(). out variable dans JSP est écrivain d'habillage d'instance JspWriter obtenu response.getWriter() alors l'appel response.getOutputStream() échouera.

Ce que vous devez faire dans votre JSP:

<% 
    new MyClass().writeToWriter(out); 
%> 

Et MyClass:

public void writeToWriter(Writer w) { 
    w.println("My data appended to correct writer"); 
} 
1

Demandez le retour de classe vous un itérateur qui génère le texte un petit morceau à la fois. Vous pouvez ensuite parcourir l'itérateur dans la JSP et imprimer les blocs de données à l'emplacement approprié.

Questions connexes