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???
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…
bom, para transformar em beans (se é isto que vc quer fazer)
pode utilizar o Digester
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();
File f = new File("meuArquivo.xsl");
Transformer t = tf.netTransformer(new StreamSource(f));
File sourceXML = new FIle("meuArquivoXML.xml");
File resultXML = new File("xmlDestino.xml"); //aqui pode utilizar um ByteArrayOutputStream também para guardar o resultado em memoria)
t.transform(new StreamSource(sourceXML),new StreamResult(resultXML));
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
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
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???
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:
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?
da para passar parametros sim, só não lembro como faz, não mexo muito com isto
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
Consegui ter uns progressos aqui… para referenciar um atributo dentro da XPath é só fazer assim <x:out select="/$trechoXML/tag[@atributo = $pageScope:variavel]">
Mas vou estudar a possibilidade de colocar meu código em XSTL mesmo… tenho de estudar mais MVC e os Patteners.