Tapestry 5 - 在组件上POST到端点并在一个场景中获取JSON或在其他场景中重定向

时间:2013-08-07 10:37:54

标签: ajax tapestry

我正在向旧版Tapestry登录组件添加新要求,以便在登录时发生某个错误情况时显示弹出窗口,而不进行页面重新加载。

目前,登录组件使用标准Tapestry表单提交 - 即登录信用卡在表单提交时发布到服务器,登录处理完成,并根据结果Tapestry通过返回页面类进行适当的重定向,或者注入了@InjectPage的页面对象,它已经完成了一些设置 - 标准的Tapestry真的。

我需要保留当前的逻辑 - 即保持Tapestry执行当前的重定向,但我还需要以下附加功能:

  1. POST请求必须通过AJAX
  2. 完成
  3. 如果我遇到新的错误条件,结果必须是普通的JSON,因此客户端知道显示弹出窗口。
  4. 必须能够从其他基于浏览器的客户端调用登录端点,这些客户端对Tapestry一无所知,反之亦然。但是Tapestry重定向应该可以工作(如果可能的话 - 服务器和客户端框架是如何重定向的?)以及普通JSON的发送。
  5. 我认为(1)和(2)使用Tapestry区域非常简单,但我很难看到(3)如何适应.Dapestry支持提供可通过AJAX调用的HTTP(S)api,在任何类型的Web客户端上提供重定向以及普通的JSON响应?我怀疑这是否可行有一个很好的模式,但我在任何地方都找不到任何文档或示例,可能是因为大多数时候人们不使用Tapestry后端的非挂毯渲染客户端。 / p>

    如果事实证明这是可行的,那么如果我不向社区寻求建议并且只是自己涉猎,我预见会有大量糟糕的黑客和陷阱,所以任何指针都会非常感激!

1 个答案:

答案 0 :(得分:0)

  1. 创建一个接受用户名/密码并返回JSON成功/错误
  2. 的Web服务
  3. 创建一个基于ajax的tapestry登录页面,该页面调用onValidate()事件中的webservice
  4. 将web服务重新用于非挂毯应用
  5. 如果webservice是tapestry应用程序的一部分,您可以直接在tapestry应用程序中调用java LoginService,而不是通过webservice包装器。