4

我在 Tapestry 5.2 应用程序中遇到了这个问题:

表单要求请求方法是 POST 并且 t:formdata 查询参数有值。

在访问日志中,我发现有时会有来自不同用户的使用 GET 方法提交的表单。不过,根据文档,Tapestry 5 使用 post-redirect-get 方案。此页面不允许匿名访问,所以它不能是机器人。所以我很沮丧,这可能是导致此类问题的原因。请提出建议。

表单上有几个由 Ajax 刷新的选择。

编辑 2. 这样的 GET 请求来自用户而不是机器人,因为从该 ips 成功登录。

4

3 回答 3

0

我注意到该form组件具有以下内容:

Object onAction(EventContext context) throws IOException {
   ...
   executeStoredActions();
   ...
}

private void executeStoredActions()
{
    String[] values = request.getParameters(FORM_DATA);

    if (!request.getMethod().equals("POST") || values == null)
        throw new RuntimeException(messages.format("invalid-request", FORM_DATA));
    }
    ...
}

这意味着它将处理来自自身和任何嵌套组件的所有“动作”事件。我不认为你有一个嵌套组件触发“action”事件(例如actionlink)而不是处理/中止事件?这些事件会“冒泡”到表单处理程序并导致错误。

请参阅此处了解事件可能“冒泡”的原因。

于 2013-10-08T13:30:01.803 回答
0

我猜测一下,说这是一个网络爬虫,它正在爬取你的生产站点。您可能想要自定义 Tapestry 的异常处理以隐藏网络爬虫的异常。

您通常可以通过用户代理请求标头检测网络爬虫。

有关已知机器人的列表,请参见此处

于 2013-10-08T12:17:04.123 回答
0

这是一个老问题,但万一其他人在搜索中偶然发现它……您可以“装饰”Tapestry 的 RequestExceptionHandler 以捕获此异常并将用户重定向到他们可能想要的页面。

有关实现此功能的代码,请参阅 Tapestry 特定错误常见问题解答:

https://tapestry.apache.org/specific-errors-faq.html

于 2016-01-20T12:11:36.653 回答