2013-03-06 11 views
6

Voglio generare un JSP utilizzando tag XSLT e <x:transform>. Ma non ho un file XML sul mio file system, e non posso importarlo come: <c:import url="./xml/MyXml.xml" var="xmldoc"/>. Viene generato dinamicamente nel codice Java e impostato come attributo String per richiesta. provo fare in questo modo:Posso creare un JSP da XML generato dinamicamente?

<div id="mydiv"> 
    <c:set var="xmldoc"> 
     <c:out value="${requestScope.someXmlString}"/> 
    </c:set> 
    <c:import url="./xsl/MyStylesheet.xsl" var="xsltdoc"/> 
    <x:transform xml="${xmldoc}" xslt="${xsltdoc}"/> 
</div> 

o

<div id="mydiv"> 
    <c:set var="xmldoc" value="${requestScope.someXmlString}">   
    <c:import url="./xsl/MyStylesheet.xsl" var="xsltdoc"/> 
    <x:transform xml="${xmldoc}" xslt="${xsltdoc}"/> 
</div> 

Ma non funziona. Sembra che <x:transform> si aspetti solo un documento xml (non una stringa). Come posso farlo? O c'è un altro modo per farlo?

+1

Secondo [questo] (http://www.tutorialspoint.com/jsp/jstl_xml_transform_tag.htm) dovrebbe funzionare. Credo che il problema sia nella direttiva 'c: import'. Solo a scopo di test, prova a utilizzare l'URL assoluto (fe 'http: // localhost: 8080/myapp/xsl/MyStylesheet.xsl'), e se funziona, puoi provare a giocare con' $ {pageContext.servletContext.servletContextName } 'o qualcosa di simile. – n1ckolas

+0

Grazie. Ma ho provato come ' '. E ha funzionato. Penso che la ragione non sia "c: import". Ma proverò a suonare il whiskey di più. – user2140493

+0

Ecco di cosa sto parlando: invece di '' prova ad usare '' e vedere cosa succede. – n1ckolas

risposta

0

Non è necessario provare e impostare il valore a cui è possibile fare direttamente riferimento al valore della richiesta nel tag <x:transform>.

<x:transform xml="${requestScope.someXmlString}" xslt="${xsltdoc}"/> 

Per impostazione predefinita jstl utilizza l'ambito della richiesta. Quindi se imposti il ​​valore come request.setAttribute ("someXmlString", xmlStr); quindi è possibile chiamare direttamente

<x:transform xml="${someXmlString}" xslt="${xsltdoc}"/> 

Entrambi dovrebbero funzionare.