Tiles Framework: обновлять только содержимое тела

у нас есть страница макета Tiles с заголовком, меню, телом и нижним колонтитулом. В этом макете, когда пользователь выполняет какие-либо действия в списках меню, весь макет (включая верхний колонтитул, меню и нижний колонтитул) обновляется. Я хочу, чтобы заголовок, меню, нижний колонтитул были статичными, и только часть тела должна обновляться.

Есть ли способ предотвратить обновление верхнего колонтитула, меню и нижнего колонтитула и обновить только содержимое тела при щелчке меню, которое можно реализовать с помощью плиток?

 Th0rndike14 июн. 2012 г., 10:45
Если вы хотите получить ТОЛЬКО тело вашей плитки с сервера, я считаю, что это невозможно, используя только плитки. Вы можете сделать это с помощью вызовов ajax ...
 Ashish Kataria15 июн. 2012 г., 08:15
ок..якс звонит с плитками, но как поступить?

Ответы на вопрос(2)

ну и была немного другой, но с той же идеей.

В моей конфигурации, используя плитки для решения с использованием только представлений, я не мог выполнить пересылку нового тела, используя файл jsp напрямую, например, используя path = & quot; /pathToJsp/content1.jsp" ;.

Используя стандартную конфигурацию весенней документации для ваших плиток в файле layouts.xml, добавьте помимо существующего шаблона новый шаблон, который будет отвечать за содержание нового тела каждый раз, когда выполняется запрос Ajax & # x200B; & # x200B ;.

<definition name="bodySwitcher" template="/WEB-INF/layouts/bodySwitcher.jspx">
<put-attribute name="bodyContent" value="" />
</ Definition>

Установите файл шаблона как:

<div xmlns: jsp = "http://java.sun.com/JSP/Page"
xmlns: c = "http://java.sun.com/jsp/jstl/core"
xmlns: tiles = "http://tiles.apache.org/tags-tiles"
xmlns: spring = "http://www.springframework.org/tags"
xmlns: util = "urn: jsptagdir :/ WEB-INF/tags/util" id = "bodySwitcher"
version = "2.0">

<tiles:insertAttribute name="bodyContent" />

</div>

В файле views.xml установите содержимое для каждой ссылки, в частности, для загрузки нового тела вашей страницы:

<definition name="link1" extends="bodySwitcher">
<put-attribute name="bodyContent" value="/WEB-INF/views/link1.jspx" />
</ Definition>

<definition name="aboutus" extends="bodySwitcher">
<put-attribute name="bodyContent" value="/WEB-INF/views/aboutus.jspx" />
</ Definition>

Запрос Ajax может быть выполнен & # x200B; & # x200B; в основном шаблоне:

$ (Document). ready (function () {

$ ('. PageAction'). click (function (e) {
LoadPage (e)
});

function LoadPage (e) {
e.preventDefault ();
console.log (e)
console.log (e.currentTarget.pathname);
$ ('# BodySwitcher'). children (). remove ();
$ ('# BodySwitcher'.) Load ("bodySwitcher? Method =" + e.currentTarget.pathname);
}

});

Ajax-запрос может быть обработан с помощью контроллера, который пересылает для просмотра указанного в методе параметра bodySwitcher. Вернуть прямую строку как & quot; forward: & quot; + link1 для пересылки контроллеру, обрабатывающему запросы link1;

Решение Вопроса

1.- Создайте и определите плитку, которая будет вашей базой, составленную из заголовка, тела и нижнего колонтитула, которая будет выглядеть следующим образом:

<div id='headerTile'>whatever goes here...</div> <!--this is baseHeader.jsp-->
<div id='bodyTile'>whatever goes here....</div>  <!--this is baseBody.jsp-->
<div id='footerTile'>whatever goes here...</div>  <!--this is baseFooter.jsp-->

давайте рассмотрим каждый из этих элементов в вашем определении:

<definition name="layoutBase" path="/whateverPathItIs/layoutBase.jsp">
    <put name="header" value="/whateverPathItIs/baseHeader.jsp"/>
<put name="body" value="/whateverPathItIs/baseBody.jsp" />
<put name="footer" value="/whateverPathItIs/baseFooter.jsp" />         
</definition>

2.- Создайте и определите все различные jsp, которые заменят содержимое вашего тела, пожалуйста, помните, что этот jsp должен содержать только элементы тела. Допустим, у вас есть 2 других содержимого тела, готовых для отображения на вашей странице, каждое из которых будет плиткой:

<div id='bodyContent1'>whatever goes here again...</div> <!--this is content1.jsp-->

<div id='bodyContent2'>whatever goes here again 2</div> <!--this is content2.jsp-->

3.- На данный момент у вас есть как базовая плитка jsp, так и 2 других jsp, которые содержат содержимое тела. Теперь нам нужно действие Struts, которое будет действовать как служба, возвращая соответствующее тело в зависимости от запроса AJAX.Do this as a normal action, and at the mapping.findForward method in the end, return the jsp which contains your body, Вы можете создать одно действие для каждого содержимого тела или отдельное действие DispatchAction, которое содержит метод для каждого тела. Второй параметр более чистый, и действие будет определено следующим образом:

<action path="/bodySwitcher" 
        type="BodySwitcherAction"
        parameter="method"
        scope="request"
        >
    <forward name="content1" path="/pathToJsp/content1.jsp"/>
    <forward name="content2" path="/pathToJsp/content2.jsp"/>
</action>

4.- Чтобы переключать содержимое, используйте javascript или jquery для вызова ajax и загрузите возвращенный jsp в ваше тело. Это пример метода, который переключал бы содержимое в jQuery, используя .load () в качестве вызова ajax:

function switchContent(whichContent){
     $('#bodyTile').children().remove();
     $('#bodyTile').load("/pathToYourApp/bodySwitcher.do?method="+whichContent);
}

Меня не обескураживает длительность ответа, я просто пытаюсь объяснить чисто. Это на самом деле довольно легко сделать, и вопрос в большей степени связан с jquery / javascript, единственная деталь - как использовать действие Struts как сервис. Удачи.

 18 июн. 2012 г., 11:21
Разве этого недостаточно?
 21 июн. 2012 г., 09:09
это другой вопрос :) вы можете попробовать использовать обычный вызов $ .ajax, я использовал метод load, потому что он проще. В SO есть много вопросов, объясняющих, как сделать вызов ajax, провести некоторое исследование, и вы будете в пути.
 Ashish Kataria21 июн. 2012 г., 10:54
спасибо ... еще кое-что, что я хотел бы знать, использование iframes также может достичь этого ... при использовании ajax-вызовов, будет ли какое-то преимущество перед iframes?
 Ashish Kataria17 июн. 2012 г., 13:49
спасибо за четкое объяснение, можете ли вы дать мне пример кода для этого .. это поможет мне лучше понять.
 Ashish Kataria21 июн. 2012 г., 08:19
$ ('# bodyTile'). load работает для firefox, но не для Internet Explorer.

Ваш ответ на вопрос