0

我正在尝试将使用 Tapestry5 编写的页面添加到在 Apache Tomcat 上使用 Tapestry 4 编写的 Web 应用程序中。假设我在 $tomcat/shared/lib 中有必要的 jar。

我按照此处的示例制作了一个基本的表单模板和相应的 java 类进行测试,然后用新的替换现有的 html 文件,但是我遇到了由页面规范 (.page) 文件引起的 DocumentParseException每当我尝试通过 tomcat 访问页面时,都会出现“'-//Apache Software Foundation//Tapestry Specification 5.3//EN' 的意外公共 ID”。如果我将页面规范文件中的那一行改回“Tapestry Specification 4.0//EN”,我会得到一个不同的异常,说我需要在 java 类中实现 IPage 接口。

这是我第一次从事涉及 Tapestry 的项目,我在网上找不到任何特定于这个问题的东西,所以任何帮助都将不胜感激。

4

2 回答 2

1

我已经为一个遗留应用程序做到了这一点,这个过程花了大约 3 个月的时间来迁移所有服务并运行第一页。这是一个概述。由于各种原因,我无法发布代码。

  1. 更新到挂毯 4.1.6。(如果你没有,可能会很长很痛苦)。
  2. 确保tapestry4 servlet url-pattern 类似于/t4/* 并且t5 忽略的路径包含/t4/.*。
  3. 为 t4 请求初始化 t5 请求全局变量。(子类 t4 servlet 并覆盖 doService 方法)。
  4. 为 t5 请求初始化 hivemind 和 t4 请求全局变量。(在“after:StoreIntoGlobals”和“before:EndOfRequest”之间的 t5 模块中贡献一个 HttpServletRequestFilter)。
  5. 为 hivemind 为 t5 服务创建一个 ObjectProvider。
  6. 将所有服务迁移到 t5 ioc。(这可能很棘手,因为您不能直接使用 hivemind 服务,但您可以在幕后使用 hivemind 注册表)。
  7. (可选)为tapestry4 和t5 创建链接组件,自动为您提供具有相同名称和处理激活上下文的tapestry4 或tapestry5 页面的链接。您可以将 PageRenderLinkSource 用于 t5 链接,将外部服务用于 t4。
  8. 为每个有状态的服务创建 hivemind 的包装器。

如果您的代码库不大或非常复杂,恕我直言,这绝对不值得。

于 2013-02-05T19:30:48.630 回答
0

您可以并排运行 Tapestry 4 和 Tapestry 5(包名称不同,正是因为这个原因)......但它们彼此一无所知,并且不能直接交互。这就像您可以拥有具有多个 servlet 的单个 WAR 一样;不同的应用程序只能通过 URL 或 HttpSession 中的共享状态进行通信。

于 2013-05-31T18:38:36.570 回答