ver
fonte: OpenLaszlo Blog
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_S2AA" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>struts2_action_annotations</display-name>
<!-- ======= -->
<filter>
<filter-name>struts</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
<init-param>
<!-- define os pacotes que irá considerar contendo classes actions -->
<param-name>actionPackages</param-name>
<!-- para definir mais de um pacote utilize "," -->
<param-value>actions</param-value>
</init-param>
</filter>
<!-- ======= -->
<filter-mapping>
<filter-name>struts</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- ======= -->
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app><?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>
<!-- habilita o uso de outros métodos de action internamente na classe action -->
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
<constant name="struts.devMode" value="false" />
<!-- configuração automática -->
</struts>package actions;
import org.apache.struts2.config.Result;
import org.apache.struts2.config.Results;
@Results({
@Result(name="success", value="/jsp/result.jsp"),
@Result(name="method_1", value="/jsp/result.jsp"),
@Result(name="method_2", value="/jsp/result.jsp")
})
public class AnnotAction {
//--------------------------------------------------------------------------
private static final long serialVersionUID = 1L;
//--------------------------------------------------------------------------
private String message;
//--------------------------------------------------------------------------
public String execute() {
this.setMessage( "Success" );
return "success";
}
public String method_1() {
this.setMessage( "Method 1" );
return "method_1";
}
public String method_2() {
this.setMessage( "Method 2" );
return "method_2";
}
//--------------------------------------------------------------------------
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
//--------------------------------------------------------------------------
}<%@ taglib prefix="s" uri="/struts-tags" %>
<center><s:property value="message"/></center><?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_S2AA" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>struts2_action_annotations</display-name>
<!-- ======= -->
<filter>
<filter-name>struts</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
<init-param>
<!-- define os pacotes que irá considerar contendo classes actions -->
<param-name>actionPackages</param-name>
<!-- para definir mais de um pacote utilize "," -->
<param-value>actions</param-value>
</init-param>
</filter>
<!-- ======= -->
<filter-mapping>
<filter-name>struts</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- ======= -->
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>package actions;
import org.apache.struts2.config.Result;
import com.opensymphony.xwork2.ActionSupport;
@Result(name="success", value="/jsp/success.jsp")
public class AnnotAction extends ActionSupport {
private static final long serialVersionUID = 1L;
public String execute() {
return "success";
}
}<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_Struts_Tiles" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>Struts 2 Tiles 2 - Example</display-name>
<!-- ======= -->
<filter>
<filter-name>struts</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<!-- ======= -->
<filter-mapping>
<filter-name>struts</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- ======= -->
<listener>
<listener-class>org.apache.tiles.listener.TilesListener</listener-class>
</listener>
<!-- ======= -->
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.jsp</welcome-file>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app><?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE tiles-definitions PUBLIC
"-//Apache Software Foundation//DTD Tiles Configuration 2.0//EN"
"http://struts.apache.org/dtds/tiles-config_2_0.dtd">
<tiles-definitions>
<!-- definição do layout da página principal -->
<definition name="template.page" template="/template/layout.jsp">
<put name="title" value="Struts 2 + Tiles 2"/>
<put name="header" value="/template/headerMain.jsp"/>
<put name="menu" value="/template/menuMain.jsp"/>
<put name="footer" value="/template/footerMain.jsp" />
</definition>
<definition name="welcome.page" extends="template.page">
<put name="body" value="/jsp/welcome.jsp"/>
</definition>
</tiles-definitions><%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%-- atributo da request --%>
<tiles:importAttribute name="title" scope="request"/>
<%-- definição do layout --%>
<html>
<head>
<!-- recupera o atributo setado na definição do tiles.xml -->
<title><tiles:getAsString name="title"/></title>
</head>
<body>
<table width="100%" height="100%">
<tr bgcolor="yellow">
<td colspan="2">
<tiles:insertAttribute name="header" />
</td>
</tr>
<tr>
<td bgcolor="gray">
<tiles:insertAttribute name="menu" />
</td>
<td>
<tiles:insertAttribute name="body" />
</td>
</tr>
<tr bgcolor="yellow">
<td colspan="2">
<tiles:insertAttribute name="footer" />
</td>
</tr>
</table>
</body>
</html><?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="base" extends="struts-default">
<result-types>
<result-type name="tiles" class="org.apache.struts2.views.tiles.TilesResult" />
</result-types>
<action name="index">
<result type="tiles">welcome.page</result>
</action>
</package>
</struts>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
}<?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>

<script>
var foo = new LzView(canvas, {width: 50, height: 50,
x: 50, y: 100,
bgcolor: 0,
name: "myview"});
</script>
/lps da raíz da app descompactada do servlet para o diretorio /WebContent do seu projeto/WEB-INF/lps da app descompactada do servlet para o diretorio /WebContent/WEB-INF/ do seu projeto/WEB-INF/lib da app descompactada do servlet para o diretorio /WebContent/WEB-INF/lib do seu projeto/WEB-INF/web.xml as seguintes linhas abaixo e atualize no /WebContent/WEB-INF/web.xml do seu projeto:
<servlet>
<servlet-name>LPS</servlet-name>
<servlet-class>org.openlaszlo.servlets.LZServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>LZViewer</servlet-name>
<servlet-class>org.openlaszlo.servlets.LZViewer</servlet-class>
</servlet>
<servlet>
<servlet-name>AuthenticationServlet</servlet-name>
<servlet-class>AuthenticationServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>AxisServlet</servlet-name>
<servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LPS</servlet-name>
<url-pattern>*.lzx</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>LPS</servlet-name>
<url-pattern>*.lzo</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>LZViewer</servlet-name>
<url-pattern>/LZViewer</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>AuthenticationServlet</servlet-name>
<url-pattern>/AuthenticationServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>*.jws</url-pattern>
</servlet-mapping>
/WebContent/WEB-INF/web.xml