如何配置 Spring 和 Apache Tiles 定义以从类路径解析 jsps

发布于 2024-11-19 09:28:24 字数 1674 浏览 3 评论 0原文

这篇文章不是很短,所以请耐心等待。
我正在使用 Spring 3.0、Apache Tiles 2.2 和 Spring WebFlow 2.2 开发一个 Web 应用程序。一个重要的要求是它需要非常模块化,这意味着每个应用程序模块都将作为单独的 Jar 文件提供。这可以通过类路径加载资源和配置来完成。
我想将模块的所有类、bean 配置、视图定义、流程定义和 jsp 页面捆绑到这个 jar 文件中。前两个是微不足道的。
对于接下来的 2 个,我找到了解决方案:
流定义
加载

<webflow:flow-registry id="flowRegistry" flow-builder-services="flowBuilderServices" base-path="classpath:/org/example/webflow/samples">
    <webflow:flow-location-pattern value="/**/*-flow.xml" />
</webflow:flow-registry>

基本路径可以从类路径视图定义
TilesConfigurer 还可以通过类路径加载

<bean id="tilesViewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
    <property name="viewClass" value="org.springframework.web.servlet.view.tiles2.TilesView"/>
</bean>
<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles2.TilesConfigurer">
    <property name="definitions">
        <list>
            <value>classpath:/org/example/**/tiles/tile-views.xml</value>
    </list>
</property>
</bean>

唯一剩下的就是解析页面,最好通过以下方式:

<definition name="myPage" extends="main">
    <put-attribute name="header" value="classpath:/org/example/pages/headers/view_events.jsp" />
    <put-attribute name="siteContent" value="classpath:/org/example/pages/admin/view_events.jsp" />
    <put-attribute name="footer" value="classpath:/org/example/pages/blank.jsp" />
</definition>

有什么方法可以达到期望的结果吗?我通过搜索得到的最接近的东西是 Apache Tiles 通配符支持和 EL 支持,但这不是我需要的。
提前致谢。

This one's not very short, so please bear with me.
I'm developing a web app with Spring 3.0, Apache Tiles 2.2 and Spring WebFlow 2.2. One important requirement is that it needs to be very modular, meaning each application module will be delivered as a separate Jar file. This can be done by loading resources and configs through the classpath.
I would like to bundle in this jar file all classes, bean configs, view definitions, flow definitions and jsp pages for the module. The first 2 are trivial.
For the next 2 I found solutions:
flow definitions
base-path can be loaded from classpath

<webflow:flow-registry id="flowRegistry" flow-builder-services="flowBuilderServices" base-path="classpath:/org/example/webflow/samples">
    <webflow:flow-location-pattern value="/**/*-flow.xml" />
</webflow:flow-registry>

view definitions
TilesConfigurer can also load through classpath

<bean id="tilesViewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
    <property name="viewClass" value="org.springframework.web.servlet.view.tiles2.TilesView"/>
</bean>
<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles2.TilesConfigurer">
    <property name="definitions">
        <list>
            <value>classpath:/org/example/**/tiles/tile-views.xml</value>
    </list>
</property>
</bean>

The only thing left is resolving pages, preferably through something like:

<definition name="myPage" extends="main">
    <put-attribute name="header" value="classpath:/org/example/pages/headers/view_events.jsp" />
    <put-attribute name="siteContent" value="classpath:/org/example/pages/admin/view_events.jsp" />
    <put-attribute name="footer" value="classpath:/org/example/pages/blank.jsp" />
</definition>

Is there any way of achieving the desired result? The closest thing I got through search was Apache Tiles wildcard support and EL support, but it's not what I need.
Thanks in advance.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

顾冷 2024-11-26 09:28:24

我有一些与你描述的非常相似的东西。我解决了将“tiles-el”添加到我的 pom.xml 中的问题,然后只需在我的图块定义上将“值”切换为“表达式”即可,如下所示

   <definition name="mypage" extends="main">
        <put-attribute name="header" expression="${header}"/>

您甚至可以在表达式上使用简单的条件,如下所示

<put-attribute name="header" expression="/WEB-INF/layouts/${bean.field ? 'path1/' : 'path2/'}header.jsp">

I've got something very similar as you described. I solved adding "tiles-el" to my pom.xml, then was just matter of switch the "value" to "expression" on my tiles definitions like this

   <definition name="mypage" extends="main">
        <put-attribute name="header" expression="${header}"/>

You can even play with simple condition on the expression like this

<put-attribute name="header" expression="/WEB-INF/layouts/${bean.field ? 'path1/' : 'path2/'}header.jsp">
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文