Вопрос по – OGNL и шаблоны, работающие в определениях плиток с помощью struts2 -iles-plugin?

0

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

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

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

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

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

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

Я не уверен, что ты пытаешься сделать - ты хочешь, чтобы OGNL в определении Tiles использовал стек значений S2? Dave Newton
Да ... и это так. Я просто не знал, что делаю, документация может быть немного понятнее. Quaternion

Ваш Ответ

1   ответ
3

потому что она проста и понятна, с Tiles 2.2.2 вы можете получить поддержку подстановочных знаков, чтобы вставить ваши соглашения struts2 прямо в систему шаблонов, и теперь естьOGNL тоже!

Шаги по добавлению плиток 2.2.2 с поддержкой OGNL внутри плиток (в настоящее время используется Struts 2.3.1.2):

1) Добавьте плагин struts2-плитки-плагинов

2) Добавьте плитки 2.2.2, включая банки, которые поддерживают ognl. Предполагается, Maven: ВСЕ идентификаторы группы: Org.apache.tiles ВСЕ версии 2.2.2, следующие идентификаторы артефактов:

Плитка-апи Плитка-ядро Плитка-дополнение Плитка[email protected] J Плитка-OGNL Плитка-сервлет

Также необходимо добавить следующее:

log4j, log4j, 1.2.14 (уже должен быть частью базовой настройки:http: //struts.apache.org/2.x/docs/create-struts-2-web-application-using-maven-to-manage-artifacts-and-to-build-the-application.htm)

slf4j-api, org.slf4j, 1.6.4

slf4j-simple, org.slf4j, 1.6.4

Используя org.apache.tiles.extras.complete.CompleteAutoloadTilesListener, вы получаете поддержку Wild Cards, EL, OGNL, MVEL в вашем файле tile.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_2_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 из распорок для отображения жестко закодированного приветствия. Существуют три отображения действий "", "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>

Tiles.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 / содержание / плитка / body.jsp

<div>
    This is the default body.
</div>

/ WEB-INF / содержание / плитка / footer.jsp

<div>
    This is the default footer.
</div>

/ WEB-INF / содержание / плитка / header.jsp

<div>
    This is the default header.
</div>

/ WEB-INF / содержание / плитка / 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 Action

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!");
    }
}

Теперь этого должно быть достаточно, чтобы заставить плитки работать в вашем приложении.

Любая помощь в этом вопросе, пожалуйста / Stackoverflow.com вопросы / 13126201 / ... Pirzada

Похожие вопросы