observe os respectivos códigos:
java: classe action
import java.io.ByteArrayInputStream;
import java.io.InputStream;
public class DynamicStreamAction {
//--------------------------------------------------------------------------
// parametros para uso na saída da action
private String contentType;
private int contentLength;
private String contentDisposition;
// definição da saída do stream
private InputStream myStream;
//--------------------------------------------------------------------------
public String execute() {
// definindo o tipo de conteúdo
this.setContentType( "application/xml" );
// definindo que será em anexo( solicitará o salvamento do arquivo )
this.setContentDisposition( "attachment; filename=XmlAction.xml" );
// definindo o XML de saida
String xml = "<tag>xml teste de saída áéíóú ç à...</tag>";
// setando o stream para o tributo
this.setMyStream( new ByteArrayInputStream( xml.getBytes() ) );
// definindo o tamanho do contentLength
this.setContentLength( xml.getBytes().length );
return "success";
}
//--------------------------------------------------------------------------
// get´s & set´s
}
respectivo mapeamento da action com definição dos parametros do result, tipo stream dinâmicos
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="stream" namespace="/stream" extends="struts-default">
<action name="dynamic" class="stream.DynamicStreamAction">
<result name="success" type="stream">
<param name="inputName">myStream</param>
<param name="contentType">${contentType}</param>
<param name="contentDisposition">${contentDisposition}</param>
<param name="contentLength">${contentLength}</param>
</result>
</action>
</package>
</struts>
* Observe: que os parametros definidos no mapeamento da action são respectivamente os mesmo nomes dos atributos da classe action...