我正在向旧版 Tapestry 登录组件添加一个新要求,以在登录时发生某种错误情况时显示一个弹出窗口,而无需重新加载页面。
目前登录组件使用标准的 Tapestry 表单提交 - 即登录凭据在表单提交时被 POST 到服务器,登录处理完成,并且基于结果 Tapestry 通过返回页面类或页面对象进行适当的重定向注入@InjectPage
其中已经完成了一些设置 - 真正的标准 Tapestry 东西。
我需要保持当前逻辑不变 - 即让 Tapestry 继续执行它当前所做的重定向,但我还需要以下附加功能:
- POST 请求必须通过 AJAX 完成
- 如果我遇到新的错误条件,结果必须是纯 JSON,因此客户端知道要显示弹出窗口。
- 登录端点必须能够从其他对 Tapestry 一无所知的基于浏览器的客户端调用,反之亦然。但是 Tapestry 重定向应该可以工作(如果这可能 - 重定向是如何融入服务器和客户端框架的?)以及发送纯 JSON。
我认为 (1) 和 (2) 使用 Tapestry 区域很容易实现,但我很难看到 (3) 是如何适应的。Tapestry 是否支持提供可通过 AJAX 调用的 HTTP(S) api,它提供重定向为以及任何类型的 Web 客户端上的普通 JSON 响应?我怀疑这是否可能有一个很好的模式来做这件事,但是我在任何地方都找不到任何文档或示例,可能是因为大多数时候人们不使用带有 Tapestry 后端的非 Tapestry 渲染客户端。
如果这确实可行,我预见到如果我不向社区寻求建议而只是涉足自己,我会预见到大量糟糕的黑客攻击和陷阱,所以任何指点都将不胜感激!