OGNL и подстановочные знаки работают в определениях плиток с помощью struts2-tiles-plugin?

Я хочу, чтобы Tiles разрешал ognl из стека значений struts2. Как это сделать?

Использование тайлов 2.2.2 (хотя можно использовать более позднюю версию, например 3, это нормально)

Здесь упоминается новая функция: http://tiles.apache.org/2.2/framework/whats-new.html

Здесь показано, как это реализовать: http://tiles.apache.org/2.2/framework/tutorial/advanced/el-support.html#OGNL_Support

Но я не уверен, как это сделать в моем проекте. У кого-нибудь плитка 3 работает в проекте struts2? Я помню, как читал о том, как включить все новые функции в плитках 3 по умолчанию, но не могу найти ссылку на эту страницу.

Если конфигурация может быть выполнена в любом случае с помощью spring, это нормально (если это помогает, если нет, то это не проблема).


person Quaternion    schedule 06.04.2012    source источник
comment
Я не уверен, что вы пытаетесь сделать - вы имеете в виду, что хотите, чтобы OGNL в определении плиток использовал стек значений S2?   -  person Dave Newton    schedule 08.04.2012
comment
Да... так и есть. Я просто не знал, что делаю, документация могла бы быть немного яснее.   -  person Quaternion    schedule 09.04.2012


Ответы (1)


Мне нравится система шаблонов плиток, потому что она проста и прямолинейна. В 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
comment
Любая помощь по этому вопросу, пожалуйста, stackoverflow.com/questions/13126201/ - person Pirzada; 29.10.2012