распорки 2, плитки 2 динамическое название


Я использую tiles 2.0.6 в качестве основы шаблона вместе с распорками 2.1.6. Я пишу простую страницу cms и хочу, чтобы пользователь мог определить заголовок каждой html-страницы.

У меня есть такое определение названия

    <definition name="base" template="/WEB-INF/jsp/templates/base.jsp">
        <put-attribute name="title" value=" "/>
        <put-attribute name="header" value="/WEB-INF/jsp/templates/header.jsp"/>  
        <put-attribute name="content" value="dummy"/>
        <put-attribute name="footer" value="/WEB-INF/jsp/templates/footer.jsp"/>   
        <put-attribute name="search" value="/WEB-INF/jsp/search.jsp"/>
    </definition>    
    <definition name="staticview" extends="base">
        <put-attribute name="title" value=" - Static"/>
        <put-attribute name="content" value="/WEB-INF/jsp/static/view.jsp"/>
    </definition>  

Вместо того, чтобы сделать заголовок jsp, есть ли способ динамически переопределить заголовок (строку) в моем заголовке.jsp в более позднем атрибуте jsp, например view.JSP-страница. Или даже на 1 шаг дальше, используя EL

<put-attribute name="title" value="%{title}"/>

И пусть он поднимет название на стойках ognl динамически.

Пожалуйста, посоветуйте

Заранее спасибо

6 6

6 ответов:

На странице просмотра мы должны иметь это -

<title><tiles:getAsString name="title" /></title>

Выше вы получите заголовок для страницы. Кроме того, поскольку мы хотим, чтобы заголовок страницы был динамическим, в плитках.конфигурация xml, я добавил

<definition name="page1" extends="base">
    <put-attribute name="title" value="Page 1"/>
    <put-attribute name="content" value="/WEB-INF/jsp/page1.jsp"/>
</definition>
<definition name="page2" extends="base">
    <put-attribute name="title" value="Page 2"/>
    <put-attribute name="content" value="/WEB-INF/jsp/page2.jsp"/>
</definition>

Теперь это может показаться, что набрав его, вы сделаете его похожим на статический. Но каждый раз, когда вы просматриваете эту страницу, заголовок должен быть одинаковым для этой страницы. Что может быть лучше места, чтобы иметь эту информацию, что на плитках.XML.

Для меня это был не сам титул, но я нуждался в нем. разные заголовки страниц. Я не хотел смотреть на атрибут context, чтобы получить путь к странице и определить заголовок страницы. Так что это работало на меня и держало все свободно связанным.

Это работает, если вам нужен другой динамический заголовок для каждой страницы или что-то подобное.

Держите определение плитки следующим образом:

    <put-attribute name="title" value=""/>

Добавьтеtitle как свойство в свой класс действий.

И в поле зрения.страница jsp используйте это:

    <tiles:insertDefinition name="staticview">
        <tiles:putAttribute name="title"> 
            ${title} <%--OR, <s:property value="title"/>--%>
        </tiles:putAttribute>
        <%--Remainning content--%>
    </tiles:insertDefinition>

Я попробовал это, и это работает.

Code1

<tiles:putAttribute name="title"> 
          You String
</tiles:putAttribute>

Код 2

<tiles:insertAttribute name="title" />

Но code1 должен выполняться до code2.

Лучшим решением, на мой взгляд, является использование expression вместо value в определении плиток и передача ${title}. Но, к сожалению, вам придется делать это в каждом представлении явно. Смотрите подробнее в http://symfony-world.blogspot.com/2013/02/dynamic-attribute-values-with-apache.html

Нашел это простое решение в другом месте:

Определение атрибута плитки как обычно:

 <put-attribute name="title"  value="welcome.title"/>

На странице jsp атрибут сначала импортируется, а затем может использоваться с тегами struts:

<tiles:importAttribute name="title" />
<title><s:text name="%{#attr['title']}"/></title> 

Я добавляю заголовок к запросу в классе действий, вот мой код JSP для шаблона (плитки 1):

<title>
    <tiles:getAsString name="title"/>
    <%-- add additional title (if found) --%>
    <logic:present scope="request" name="title"><bean:write scope="request" name="title"/></logic:present>
</title>