Aem 从java调用错误组件

Aem 从java调用错误组件,aem,sightly,aem-6,Aem,Sightly,Aem 6,我有一个特别的java类(组件中包含的java类),它调用api并检查响应是否为null。如果为null,则必须调用错误组件。当我将响应状态设置为404时,它不工作,因为在执行该行之前,它将响应设置为200。在这种情况下如何调用错误组件。 注意:我已尝试将URL重定向到error.html,但这不是正确的解决方案。从组件/视图重定向或更改响应状态通常是错误的做法,因为响应可能已经提交了一些内容 您可能希望将应用程序重新设计为: 在请求处理开始时调用远程API,如果远程API返回null,则在向响

我有一个特别的java类(组件中包含的java类),它调用api并检查响应是否为null。如果为null,则必须调用错误组件。当我将响应状态设置为404时,它不工作,因为在执行该行之前,它将响应设置为200。在这种情况下如何调用错误组件。
注意:我已尝试将URL重定向到error.html,但这不是正确的解决方案。

从组件/视图重定向或更改响应状态通常是错误的做法,因为响应可能已经提交了一些内容

您可能希望将应用程序重新设计为:

  • 在请求处理开始时调用远程API,如果远程API返回null,则在向响应提交任何其他内容之前返回404
  • 通过以下任一方式处理来自远程API的空响应:
    • 提供适当的响应,以防在某些情况下预期/允许出现空响应
    • 如果不需要null响应,则引发异常,该异常将导致状态500

  • 从组件/视图重定向或更改响应状态通常是不好的做法,因为响应可能已经提交了某些内容

    您可能希望将应用程序重新设计为:

  • 在请求处理开始时调用远程API,如果远程API返回null,则在向响应提交任何其他内容之前返回404
  • 通过以下任一方式处理来自远程API的空响应:
    • 提供适当的响应,以防在某些情况下预期/允许出现空响应
    • 如果不需要null响应,则引发异常,该异常将导致状态500

  • 谢谢但当您说“在请求处理的开始调用远程API”时,我感到困惑。流程是这样的1。调用不存在的错误页面2。它将转到其父页面的组件3。页面组件有一个很好的java类,它调用api来验证页面是否存在(因为这些页面是动态页面)4。如果存在,显示它,如果没有重定向到404错误页面,我无法在步骤4设置响应状态,因为resp已经提交。我不能在步骤3中完成它,因为我可以通过调用api知道它的存在。那么,您建议采取哪一步?@Scribbler在您的情况下,可能需要一个特殊的servlet或过滤器来处理/拦截请求并检查动态API/内容。另一个想法是定义自定义页面帮助器/使用对象,该对象在呈现任何内容之前被调用,并且可以处理重定向。如果您能为我指出一些文章/url,这将非常有用。由于我对这一点还不熟悉,我已经理解了你所说的,但不知道如何实施它。第二个想法适合目前的情况,但当我执行getResponse().sendRedirect时,它工作得很好,但它改变了不应该发生的URL。不管怎样,我很感谢你到现在为止的时间和回应!谢谢但当您说“在请求处理的开始调用远程API”时,我感到困惑。流程是这样的1。调用不存在的错误页面2。它将转到其父页面的组件3。页面组件有一个很好的java类,它调用api来验证页面是否存在(因为这些页面是动态页面)4。如果存在,显示它,如果没有重定向到404错误页面,我无法在步骤4设置响应状态,因为resp已经提交。我不能在步骤3中完成它,因为我可以通过调用api知道它的存在。那么,您建议采取哪一步?@Scribbler在您的情况下,可能需要一个特殊的servlet或过滤器来处理/拦截请求并检查动态API/内容。另一个想法是定义自定义页面帮助器/使用对象,该对象在呈现任何内容之前被调用,并且可以处理重定向。如果您能为我指出一些文章/url,这将非常有用。由于我对这一点还不熟悉,我已经理解了你所说的,但不知道如何实施它。第二个想法适合目前的情况,但当我执行getResponse().sendRedirect时,它工作得很好,但它改变了不应该发生的URL。不管怎样,我很感谢你到现在为止的时间和回应!