2010-07-26 9 views
2

La configuration jsp servlet de base Je connais ....Générer HTML à partir de JSP

RequestDispatcher dispatcher = request.getRequestDispatcher(resourceA.jsp); 

dispatcher.forward(request, response); 

Le problème est, en plus d'envoyer la réponse au navigateur (resourceA.jsp), j'ai besoin pour créer une deuxième sortie HTML de resourceB.jsp, qui à son tour sera envoyé par courrier électronique ou utilisé pour créer un document PDF.

Cela ne se fait pas à chaque fois, seulement dans des conditions précises et en appelant

dispatcher.forward(request, response); 

la deuxième fois que je reçois et IllegalArgumentException.

J'ai juste besoin d'une manière à générer HTML à partir jsp (remplaçant essentiellement le $ {par} valeurs) et retourner le code html sous forme de chaîne, pas de code d'état ou les en-têtes, juste html et A ont rien à voir avec B , donc les filtres ne fonctionneront pas.

------ rejeu à première réponse ----- --- commentaire à petit pas de formatage

Je ne vois pas pourquoi cela est si difficaled ....

tout là pour de magnésium est de fusionner des données avec un contenu HTML dans le

${par} 
${par['key']} 
<c:if test="${patBoolean}" > 
<c:forEach var="pvar" varStatus="s_pvar" items="${parList}"> 

J'ai même créé un emballage pour masquer getOutputStream() et getWriter(), créer ma propre PrintWriter

public class ResponseWrapper extends HttpServletResponseWrapper{ 
    private PrintWriter printWriter; 

    public ResponseWrapper(HttpServletResponse response){ 
     super(response); 
    } 

    public ServletOutputStream getOutputStream() throws java.io.IOException{....} 

    public PrintWriter getWriter() throws java.io.IOException {....} 

} 

à obtenir le résultat de l'resourceB.jsp, mais le problème est dispatcher.forward (demande, réponse) ensembles isCommitted certains articles dans la HttpServletResponse originale.

+0

Utilisez-vous la deuxième page JSP pour créer un fichier PDF ou envoyer un courrier électronique à partir du client ou du serveur? Si vous essayez de le faire à partir du serveur, je dois admettre que les JSP ne sont pas la bonne solution, un moteur de templates serait mieux adapté à cette tâche. –

+0

Je viens de jeter un coup d'œil à Velocity ... regarde le code: #foreach ($ critère dans $ criteria) .... ça imite les jsp, j'ai besoin d'apprendre une autre méthode de script avec des pages séparées, pas de re utilisation de code ... c'est tellement simple jsp, attribut, html ... Je le fais déjà et il fonctionne pour le courrier électronique et PDF, mais le second expéditeur.forward revenir au navigateur, est maintenant le seul problème. ... il doit y avoir loin et OUI je le fais du coté du SERVEUR – nico

+0

Je pense que vous devez regarder deux requêtes HTTP au lieu d'une, surtout si vous avez réussi à faire fonctionner la partie email/PDF. Il n'y a simplement aucun moyen pour un serveur de répondre avec deux types de contenu différents, pour la même requête. Cela pourrait aussi vous aider si vous pouvez élaborer votre cas d'utilisation, car il est un peu difficile de comprendre qu'un email est généré par le serveur et envoyé au client. –

Répondre

1

JSP n'est pas la chose à faire ici. Avoir un processus séparé qui remplit un modèle Velocity (pour le courrier électronique) ou génère un fichier PDF en utilisant XSL-FO ou iText et laisser JSP hors de celui-ci. C'est un cas d'utilisation complètement séparé de renvoyer une réponse HTTP.

+0

Je ne vois pas pourquoi cela est si différent .... tout le magnésium est là pour fusionner les données avec du contenu HTML dans le ... voir édité le poste – nico

+0

@nico, c'est difficile parce que le serveur a commis la réponse à le client pour la demande initiale; Une fois la réponse validée, vous ne pouvez plus écrire une autre réponse ni modifier l'original. Vous ne pouvez pas modifier ce comportement du serveur - c'est ainsi que fonctionne Internet. –

+0

(+1) pour la suggestion de vitesse. –

Questions connexes