当前位置: 首页 > 知识库问答 >
问题:

如何将使用Tapestry5编写的页面添加到已使用Tapestry4编写的web应用程序中?

张亦
2023-03-14

我试图将用Tapestry5编写的页面添加到ApacheTomcat上用Tapestry4编写的Web应用程序中。假设我在$tomcat/share/lib中拥有必要的jars。

我制作了一个基本的表单模板和相应的java类进行测试,遵循这里的示例,然后用新的html文件替换了现有的html文件,但每当我试图通过tomcat访问页面时,我都会遇到一个DocumentParseException,这是由页面规范(.page)文件导致的,该文件的“意外公共id为'-//Apache Software Foundation//Tapestry specification 5.3//EN'”。如果我把页面规范文件中的那一行改回“Tapestry specification 4.0//EN”,我会得到另一个异常,说我需要在java类中实现IPage接口。

这是我第一次参与涉及Tapestry的项目,我在网上找不到任何关于这个问题的具体信息,因此非常感谢您的帮助。

共有2个答案

皮煜
2023-03-14

您可以并排运行Tapestry 4和Tapestry 5(由于这个原因,包名是不同的)。。。但他们彼此一无所知,无法直接互动。这就像你可以用多个servlet进行一场战争;不同的应用程序只能通过URL或HttpSession中的共享状态进行通信。

太叔京
2023-03-14

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

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

如果你的代码库不是很大或者非常复杂,那绝对不值得。

 类似资料:
  • 我想用python为我的iPhone构建一个IOS应用程序,但我有一个问题--我不知道哪个IDE最适合这个任务:/我曾经用过Java的Andriod Studio,我想知道是否有类似的东西,但对于使用python的IOS应用程序...我真的想在IDE里面有一个iPhone模拟器,就像在Andriod studio里面有一个Andriod设备模拟器一样,你可以用那部手机检查应用程序...如果有类似我

  • 问题内容: 我想用Python编写一个Android应用,将.py文件转换为APK。 问题答案: 要点:首先,APK不仅仅是压缩字节码(例如,应用程序清单,资源等),实际上还有很多其他功能,因此谈论将Python文件“转换”为APK并没有多大意义。 。 其次,我不鼓励这样做。我强烈建议改用Xamarin Forms,Cordova,Java或Xamarin.Android。Xamarin Form

  • 应用程序开发人员使用composer-clientnpm模块以编程方式连接到已部署的业务网络,创建、读取、更新、删除资产和参与者,以及提交交易。如果应用程序需要能够部署或管理业务网络,则可以使用composer-adminnpm模块。 示例landregistry.js文件包含一个代表土地注册的类,并包含列出土地权证、添加默认权证和提交交易的方法。这已经使用JavaScript类实现了; 然而,你

  • 译者:firdameng 作者:Soumith Chintala 在这个简短的教程中,我们将讨论PyTorch的分布式软件包。 我们将看到如何设置分布式设置,使用不同的通信策略,并查看包的内部部分。 开始 PyTorch中包含的分布式软件包(即torch.distributed)使研究人员和从业人员能够轻松地跨进程和计算机集群并行化他们的计算。 为此,它利用消息传递语义,允许每个进程将数据传递给任

  • translated_page: https://github.com/PX4/Devguide/blob/master/en/tutorials/tutorial_hello_sky.md translated_sha: 95b39d747851dd01c1fe5d36b24e59ec865e323e translated: true 第一个应用程序教程(Hello Sky) 本教程详细解释了如

  • 来自Java规范SE 7版 §3.1 Unicode 程序是使用Unicode字符集编写的。 §3.2词汇翻译 使用以下三个词法翻译步骤,将原始Unicode字符流转换为一系列标记。。。 我很困惑,因为我用我的本机字符编码(Windows-1252)编写我的源代码,规范提到(?)都从原始Unicode字符流开始,然后执行词法翻译(包括Unicode转义转换)。 他们提到Unicode转义可以用来包