2013-10-08 60 views
3

我在挂毯5.2应用中遇到这样的问题:GET提交而不是POST。挂毯

形式要求请求方法是POST,而且T:FORMDATA 查询参数具有值。

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

在窗体上有几个选择,由Ajax刷新。

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

+0

是否有任何AJAX的行动正在进行,可能要执行的GET请求? –

回答

0

我会猜测并说这是一个抓取您的生产网站的网络爬虫。您可能想要customise tapestry's exception handling来隐藏网页抓取工具的例外情况。

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

查看here了解已知机器人的列表。

+1

它不能被crawler,见上文修改。 – piquick

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)); 
    } 
    ... 
} 

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

请参阅here为什么一个事件可能会“冒泡”。

0

这是一个古老的问题,但万一任何人在搜索中遇到它,你可以“装饰”Tapestry的RequestExceptionHandler来捕获这个异常并将用户重定向到他们可能需要的页面。

见Tapestry的特定错误的常见问题的代码来实现这一点:

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