Мне нравится система шаблонов плиток, потому что она проста и прямолинейна. В Tiles 2.2.2 вы можете получить поддержку подстановочных знаков, чтобы протолкнуть свои соглашения struts2 прямо в систему шаблонов, а теперь есть и OGNL!
Действия по добавлению плиток 2.2.2 с поддержкой OGNL в плитки (в настоящее время используется Struts 2.3.1.2):
1) Добавьте плагин struts2-tiles
2) Добавьте банки плитки 2.2.2, включая банки, которые добавляют поддержку ognl. Предполагается, что maven: ВСЕ идентификаторы групп: org.apache.tiles ВСЕ версии: 2.2.2, следующие идентификаторы артефактов:
- плитки API
- плитка-ядро
- плитка-дополнения
- плитка-jsp
- плитка-ognl
- плитки-сервлет
Также необходимо добавить следующее:
Используя org.apache.tiles.extras.complete.CompleteAutoloadTilesListener, вы получаете поддержку подстановочных знаков, EL, OGNL, MVEL в файлеtiles.xml.
Пример web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app<struts>
<constant name="struts.devMode" value="true" />
<constant name="struts.ui.theme" value="simple" />
<constant name="struts.enable.SlashesInActionNames" value="true" />
<constant name="struts.mapper.alwaysSelectFullNamespace" value="false"/>
<package name="basicstruts2" namespace="" extends="tiles-default">
<result-types>
<result-type name="tiles" default="true" class="org.apache.struts2.views.tiles.TilesResult"/>
</result-types>
<action name="/**" class="com.kenmcwilliams.tiles.action.Test">
<result>{1}</result>
</action>
</package>
</struts>
5.xsd">
<listener>
<listener-class>org.apache.tiles.extras.complete.CompleteAutoloadTilesListener</listener-class>
</listener>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
struts.xml для демонстрации. В демонстрации используется OGNL из struts для отображения жестко запрограммированного приветственного сообщения. Существуют три сопоставления действий: "", "test" и "package/*". Значение, следующее за косой чертой, будет использоваться плитками для установки нового заголовка. Очень тривиальный пример, но показывает некоторые полезные функции.
<struts>
<constant name="struts.devMode" value="true" />
<constant name="struts.ui.theme" value="simple" />
<constant name="struts.enable.SlashesInActionNames" value="true" />
<constant name="struts.mapper.alwaysSelectFullNamespace" value="false"/>
<package name="basicstruts2" namespace="" extends="tiles-default">
<result-types>
<result-type name="tiles" default="true" class="org.apache.struts2.views.tiles.TilesResult"/>
</result-types>
<action name="/**" class="com.kenmcwilliams.tiles.action.Test">
<result>{1}</result>
</action>
</package>
</struts>
плитки.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE tiles-definitions PUBLIC
"-//Apache Software Foundation//DTD Tiles Configuration 2.1//EN"
"http://tiles.apache.org/dtds/tiles-config_2_1.dtd">
<tiles-definitions>
<definition name="baseLayout" template="/WEB-INF/content/tiles/template.jsp">
<put-attribute name="title" value="Default Title"/>
<put-attribute name="header" value="/WEB-INF/content/tiles/header.jsp"/>
<put-attribute name="body" value="/WEB-INF/content/tiles/body.jsp"/>
<put-attribute name="footer" value="/WEB-INF/content/tiles/footer.jsp"/>
<put-attribute name="variable" expression="OGNL:greeting"/>
</definition>
<definition name="test" extends="baseLayout">
<put-attribute name="title" value="Test Title"/>
</definition>
<definition name="WILDCARD:package/*" extends="baseLayout">
<put-attribute name="title" value="{1}" type="string"/>
</definition>
<definition name="" extends="baseLayout">
</definition>
</tiles-definitions>
/WEB-INF/content/tiles/body.jsp
<div>
This is the default body.
</div>
/WEB-INF/content/tiles/footer.jsp
<div>
This is the default footer.
</div>
/WEB-INF/content/tiles/header.jsp
<div>
This is the default header.
</div>
/WEB-INF/content/tiles/template.jsp
<%@taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles" %>
<%@taglib prefix="s" uri="/struts-tags"%>
<%@page contentType="text/html" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title><tiles:insertAttribute name="title"/></title>
</head>
<body>
<tiles:insertAttribute name="header"/>
<tiles:insertAttribute name="body"/>
<tiles:insertAttribute name="footer"/>
<tiles:insertAttribute name="variable"/>
</body>
</html>
Действие Test.java
package com.kenmcwilliams.tiles.action;
import com.opensymphony.xwork2.ActionSupport;
import java.util.Map;
import java.util.logging.Logger;
import org.apache.struts2.interceptor.SessionAware;
public class Test extends ActionSupport implements SessionAware{
private static final Logger log = Logger.getLogger(Test.class.getName());
@Override
public String execute(){
log.info("Test execute");
return SUCCESS;
}
private String greeting = "Hello, World from Action!";
public String getGreeting(){
return greeting;
}
@Override
public void setSession(Map<String, Object> session) {
session.put("greeting", "Greetings from session!");
}
}
Теперь этого должно быть достаточно, чтобы плитки работали для вашего приложения.
person
Quaternion
schedule
08.04.2012