我在挂毯5.2应用中遇到这样的问题:GET提交而不是POST。挂毯
形式要求请求方法是POST,而且T:FORMDATA 查询参数具有值。
在访问日志中,我发现有时候会有不同用户使用GET方法提交表单。尽管如此,根据文档,Tapestry 5使用post-redirect-get方案。此页面不允许匿名访问,因此它不能是机器人。所以我很沮丧可能是这个问题的原因。 建议请。
在窗体上有几个选择,由Ajax刷新。
编辑2.这样的GET请求来自用户而不是漫游器,因为从那个ips登录成功。
我在挂毯5.2应用中遇到这样的问题:GET提交而不是POST。挂毯
形式要求请求方法是POST,而且T:FORMDATA 查询参数具有值。
在访问日志中,我发现有时候会有不同用户使用GET方法提交表单。尽管如此,根据文档,Tapestry 5使用post-redirect-get方案。此页面不允许匿名访问,因此它不能是机器人。所以我很沮丧可能是这个问题的原因。 建议请。
在窗体上有几个选择,由Ajax刷新。
编辑2.这样的GET请求来自用户而不是漫游器,因为从那个ips登录成功。
我会猜测并说这是一个抓取您的生产网站的网络爬虫。您可能想要customise tapestry's exception handling来隐藏网页抓取工具的例外情况。
您通常可以通过用户代理请求标头检测网络爬虫。
查看here了解已知机器人的列表。
它不能被crawler,见上文修改。 – piquick
我注意到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));
}
...
}
这意味着它将处理来自所有自己“动作”事件和任何嵌套组件。我不认为你有一个嵌套组件触发“动作”事件(例如actionlink)并且不处理/中止事件?这些事件会“冒泡”到表单处理程序并导致错误。
请参阅here为什么一个事件可能会“冒泡”。
这是一个古老的问题,但万一任何人在搜索中遇到它,你可以“装饰”Tapestry的RequestExceptionHandler来捕获这个异常并将用户重定向到他们可能需要的页面。
见Tapestry的特定错误的常见问题的代码来实现这一点:
是否有任何AJAX的行动正在进行,可能要执行的GET请求? –