如何在 Wicket 的 Ajax 响应中设置自定义 HTTP 响应标头?

2024-02-18

我需要为 Wicket 应用程序的所有响应设置自定义 HTTP 标头。我目前正在自定义 RequestCycle 中执行此操作,其中 getWebResponse() 按以下方式重写:

@Override
public WebResponse getWebResponse() {
    WebResponse response = super.getWebResponse();
    response.setHeader("X-custom", "..." );
    return response;
}

这非常有效,直到现在我已经改用 AjaxCheckBox (像这样的东西 https://stackoverflow.com/questions/4265432/wicket-checkbox-that-automatically-submits-its-changed-value-to-domain-object/4363633#4363633) 而不是某些配置选项的普通复选框。

我的问题是,有没有一种简单的方法来包含我的自定义标头also在 Wicket 的 Ajax 响应中?


我找到了一个方法。最后,实际上一点也不难。当使用调试器运行一些请求时,我注意到onEndRequest() does也被要求处理 Ajax 请求.

The onEndRequest()方法已经在我们的自定义 RequestCycle 实现中被重写用于其他目的(事务提交),所以我只是移动了在那里设置标头的代码getWebResponse().

@Override
protected void onEndRequest() {
    super.onEndRequest();
    ((WebResponse) response).setHeader("X-custom", "..." );
    // ...
}

也许这里唯一不明显的事情是我需要投射response into 网络响应 http://wicket.apache.org/apidocs/1.4/org/apache/wicket/protocol/http/WebResponse.html(当字段类型为Response http://wicket.apache.org/apidocs/1.4/org/apache/wicket/Response.html)能够调用setHeader().

这本来可以在普通 Java EE 过滤器 https://stackoverflow.com/questions/4397211/how-to-set-custom-http-response-header-in-wickets-ajax-responses/4397244#4397244也可以通过设置标题after chain.doFilter()打电话(请参阅我对该问题的第二条评论)。我没有选择它,因为 1)我不清楚如何在那里连接数据访问,2)如果可以避免的话,我不想要额外的移动部件。我们已经将 RequestCycle 子类用于 HTTP 标头相关的事情,这非常适合。事实上,这个更改简化了该类,因为没有理由重写getWebResponse()不再了!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Wicket 的 Ajax 响应中设置自定义 HTTP 响应标头? 的相关文章

随机推荐