Использование Spring Webflow + Tiles: Как указать, какое определение листов использовать во время выполнения? - PullRequest
0 голосов
/ 03 августа 2011

У меня есть веб-приложение, работающее с Spring Webflow, Tiles и JSP.

В настоящее время все страницы расширяют мое определение "defaultLayout" (которое имеет баннер, структуру меню, нижний колонтитул и т. Д.).

В файле определения плиток:

<definition name="defaultLayout" template="/WEB-INF/tiles/defaultLayout.jsp"/>

<definition name="_**.view.jsp" extends="defaultLayout">
    <put-attribute name="content" value="{1}.view.jsp"/>
</definition>

Новое требование - иметь «встроенный» вид (без нижнего колонтитула / меню / и т. Д.). Я создал определение встроенного представления:

<definition name="embeddedLayout" template="/WEB-INF/tiles/embeddedLayout.jsp"/>
<definition name="_**.embedded.view.jsp" extends="embeddedLayout">
    <put-attribute name="content" value="{1}.view.jsp"/>
</definition>        

У меня есть JSP-файлы, которые определяют основное содержимое страницы (все с именем: pageName.view.jsp).

Теперь мне нужен какой-то способ, позволяющий плиткам визуализировать pageName.embedded.view.jsp (который будет использовать встроенный в Layout) вместо pageName.view.jsp на основе определенного требования (еще не выяснил, что, вероятно, запрос) параметр передан или что-то в этом роде).

Я не слишком знаком с внутренним функционированием плиток. Какой класс я могу переопределить, чтобы изменить pageName.view.jsp, чтобы он был pageName.embedded.view.jsp?

Вот моя соответствующая конфигурация Spring:

<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles2.TilesConfigurer">
    <property name="definitions">
        <list>
            <value>/WEB-INF/tiles/tiles-defs.xml</value>
        </list>
    </property>
</bean>

<bean id="webflowViewFactoryCreator" class="org.springframework.webflow.mvc.builder.MvcViewFactoryCreator">
    <property name="viewResolvers">
        <bean class="org.springframework.js.ajax.AjaxUrlBasedViewResolver">
            <property name="viewClass" value="org.springframework.webflow.mvc.view.FlowAjaxTilesView"/>
            <property name="prefix" value="_"/>
        </bean>
    </property>
</bean>

Любая помощь будет оценена.

Версия плитки: 2.2.1 Весенняя версия: 3.0.3 Версия Webflow: 2.1.1

1 Ответ

0 голосов
/ 04 августа 2011

В конце я сделал следующее, что решило мою проблему (надеюсь, это поможет другим с подобной проблемой):

Я решил, что все, что имеет / внедрено / в контекстном пути, должно использовать встроенную плиткуlayout.

Я расширил org.springframework.js.ajax.AjaxUrlBasedViewResolver, чтобы проверить, содержит ли входящий запрос (полученный с помощью Spring's RequestContextHolder) /embedded/.Если это так, он меняет viewName на whatever.embedded.view.jsp (вместо просто whatever.view.jsp. Затем он обрабатывается с использованием встроенного макета.

Это решает мою проблему.

...