Xml jstl

Galera,

Pelo meu contato com o guj sei que pouca gente se atreve a mexer com o JSP e o JSTL…

Bom… gostaria de saber, de mais de uma forma, como pegar o xml que eu monto no servlet e repassa-lo para o JSP para manipular ele com o <x:>. Dá pra fazer isso passando o Document como atributo? Tenho de transforma-lo em algum tipo de objeto, um OutputStream???

Help-me!!!

Gustavo Guilherme BacK

eu uso direto
JSP+JSTL

mas para fazer a transformação de XML para alguma outra coisa, coloque o codigo no teu servlet/action/bean e não na JSP

este papel não é dela :slight_smile:

Como assim???

A situação pela qual optei trabalhar com o xml é pelo fato da estrutura de dados aqui ser bem pesada e eu não consegui achar uma forma de acessar os valores dos dados dentro de collections para que pudesse montar as tabelas…

Pode me ajudar Rodrigo??

Gustavo Guilherme BacK

obs: agora que vi, o post está no lugar errado…

bom, para transformar em beans (se é isto que vc quer fazer)
pode utilizar o Digester :slight_smile:
tem um tutorial muito bom sobre ele do CV na MundoJava No 1

caso queira só utilizar o XSLT para transformar em algum outro tipo de dados (XHTML??)

TransformerFactory tf = TransformerFactory.getInstance&#40;&#41;;
File f = new File&#40;&quot;meuArquivo.xsl&quot;&#41;;
Transformer t = tf.netTransformer&#40;new StreamSource&#40;f&#41;&#41;;
File sourceXML = new FIle&#40;&quot;meuArquivoXML.xml&quot;&#41;;
File resultXML = new File&#40;&quot;xmlDestino.xml&quot;&#41;; //aqui pode utilizar um ByteArrayOutputStream também para guardar o resultado em memoria&#41;
t.transform&#40;new StreamSource&#40;sourceXML&#41;,new StreamResult&#40;resultXML&#41;&#41;;

bom, escrevi isto de cabeça agora, mas pode ser que te ajude,
é quase certo que o codigo não funcione de cara, mas o caminho é este :slight_smile:

assim tu pode trabalhar com o proprio XML que tu ja tem, sem poluir a JSP com codigo para transformar ele em alguma coisa melhor para o usuário :slight_smile:

Rodrigo,

O que eu ia fazer era exatamente trabalhar com o xml que eu gero a partir do JDBC consultando o Oracle9i para fazer a view no JSP usando o <x:> do JSTL. Agora criei um servlet que tem como única função me retornar o xml para tratar na JSP… mas ainda não consegui dar um parse pois está ocorrendo um erro.

Usar o <x:> diretamente no JSP é uma má prática, considerando que o xml vem da minha aplicação e o material exibido é uma tabela? Devo usar XSTL para solucionar isso???

Gustavo Guilherme BacK

se for para montar só a tabela, pode ser uma boa ideia colocar o parse dele dentro da JSP, mas normalmente não é boa ideia fazer parse de XML dentro de JSP, uma ideia seria o proprio servlet fazer a transformação do XML baseado em um XSLT e armazenar este retorno em uma string, ai na JSP você faz apenas:

&lt;c&#58;out value=&quot;$&#123;variavelRetornoXML&#125;&quot;/&gt;

Rodrigo,

Estou começando a mexer com o JSTL, e ao contrário do que você recomendou estou manipulando o XML dentro do JSP. Porque essa não é uma boa prática?

Uma das coisas que me deparei agora é que se eu quiser utilizar uma variável na expressão XPath de um select"" me pareceu até agora não ser possível. Com o XSTL há como eu criar variáveis?

Gustavo Guilherme BacK

da para passar parametros sim, só não lembro como faz, não mexo muito com isto :slight_smile:

mas as paginas JSP são feitas apenas para a view do sistema, por isto que não é uma boa ideia tratar o XML dentro delas.

se for para fazer isto, pelo menos, cria um bean que faz este trabalho, e chama ele de dentro da JSP, ou melhor ainda, de dentro de um servlet/action e deste manda só o resultado ja processado para a JSP apenas desenhar a tela :slight_smile:

Consegui ter uns progressos aqui… para referenciar um atributo dentro da XPath é só fazer assim &lt;x&#58;out select=&quot;/$trechoXML/tag&#91;@atributo = $pageScope&#58;variavel&#93;&quot;&gt;

Mas vou estudar a possibilidade de colocar meu código em XSTL mesmo… tenho de estudar mais MVC e os Patteners.

GUstavo GUilherme BacK