JBoss Seam

6 respostas
rafaelrodrigues1607

Pessoal, alguém sabe utilizar o <s:download> do JBoss Seam?

6 Respostas

alias

Qual a sua duvida?

rafaelrodrigues1607

Queria saber se tem como fazer um download de pdf através desta funcionalidade. Não encontrei nada na web que fosse claro.

alias

Hm…eventualmente voce tambem poderia gerar um link diretamente para o local do seu arquivo no servidor. Não seria mais facil?

Pra usar com o Seam, seria algo assim…hum…considere uma aplicação que tem um arquivo chamado arquivo.pdf na pasta pdf na raiz da sua aplicação.

Na pagina que voce porventura queira colocar um link para download, voce usaria a tag s:download, como abaixo:

<s:download src="/pdf.xhtml" value="Download">
     <h:outputText value="Download" />
</s:download>

Isso ai vai renderizar um linkzinho “Download” na pagina. No atributo “src” eu coloquei “pdf.xhtml”, e nesse arquivo o codigo seria APENAS esse:

<s:resource xmlns="http://www.w3.org/1999/xhtml"
			xmlns:s="http://jboss.com/products/seam/taglib"
			data="#{bean.fileDownload}" 
			contentType="application/pdf" 
			fileName="arquivo.pdf" />

Entendeu? O s:download apenas direciona a URL para um resource, que é gerado pelo Seam a partir de um arquivo, array de bytes ou inputstream. Vou retornar para o resource o arquivo pdf que falei no começo (pdf/arquivo.pdf) em um managedBean

@Name("bean")
public class Bean {
	
	@In
	private ResourceLoader resourceLoader;
	
	public InputStream getFileDownload() throws Exception {
		
		URL url = resourceLoader.getResource("pdf/arquivo.pdf");
		
		return url.openStream();
	}
}

No codigo acima eu retornei o stream do arquivo para a tag s:resource (pelo atributo “data”). Essa tag vai ler esse conteudo e gerar uma URL para o download, e imediamente o usuario vai ser redirecionado para ela. Por isso eu comentei que no arquivo “pdf.xhtml” o unico codigo necessario seria essa tag.

Entao, quando o cara clicar lá no link do s:download, essa pagina será chamada, o s:resource vai gerar o conteudo do download e o link.

Espero que nao tenha ficado muito confuso :lol:

rafaelrodrigues1607

Não ficou confuso não. Muito bem explicado parabéns. Pelo que eu estou vendo vai sanar a minha necessidade. Só uma pergunta: Você falou que eu tambem poderia gerar um link diretamente para o local do seu arquivo no servidor. O caminho é o mesmo não é?

alias

Sobre isso, pra fazer dessa forma voce nao precisaria do Seam. No exemplo acima mesmo, eu considerei que existe um arquivo chamado “arquivo.pdf” em uma pasta “pdf”, na raiz.

Entao, se eu fizesse um link para “http://www.meusite.com.br/pdf/arquivo.pdf”, o arquivo seria baixado pelo browser do mesmo jeito. Esse esquema do Seam é legal caso voce vá disponibilizar um arquivo/conteudo dinamico. Pra um arquivo estatico, na minha opiniao um link DIRETO para o recurso seria a melhor abordagem.

Se voce está perguntando se a URL gerada pelo Seam aponta diretamente para o arquivo (do jeito acima), a resposta é nao. O Seam vai gerar uma URL para um servlet proprio do framework, e esse servlet vai gerar uma resposta com o arquivo que voce quer baixar.

Alias, esqueci de falar, pra esse troço do seam funcionar voce precisa registrar o tal servlet no seu web.xml

<servlet>
		<servlet-name>Document Store Servlet</servlet-name>
		<servlet-class>org.jboss.seam.document.DocumentStoreServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>Document Store Servlet</servlet-name>
		<url-pattern>/seam/docstore/*</url-pattern>
	</servlet-mapping>
rafaelrodrigues1607

Cara, muito obrigado. Ajudou bastante.

Criado 19 de janeiro de 2012
Ultima resposta 20 de jan. de 2012
Respostas 6
Participantes 2