【发布时间】:2009-08-20 08:35:13
【问题描述】:
如果我点击一个链接,我会调用一个 servlet。
是否有可能通过过滤器或其他方式跟踪重复请求,以便避免碰到 servlet?
【问题讨论】:
标签: java sql-server
如果我点击一个链接,我会调用一个 servlet。
是否有可能通过过滤器或其他方式跟踪重复请求,以便避免碰到 servlet?
【问题讨论】:
标签: java sql-server
通常您会在链接中添加某种“请求标识符”,例如一个 GUID。您要么懒惰地跟踪您已经看到的标识符(并忽略该集合中的任何内容),要么跟踪您已生成但未看到的标识符(并忽略其中的任何 not设置)。
【讨论】:
您真的想为每个请求都这样做吗?如果您不这样做,请使用 Jon 的答案中的第一个解决方案,并忽略没有 guid 的内容。
你可以很容易地在 javascript 中做到这一点。点击任何链接后,防止它再次被点击:(使用一些 YUI):
YAHOO.util.Event.onDOMReady(function(){
function killIt(e){
YAHOO.util.Event.stopEvent(e);
}
var anchors = document.getElementsByTagName('a');
for(var i = 0; i < anchors.length; i++){
YAHOO.util.Event.addListener(anchors[i], 'click', function(e){
var el = YAHOO.util.Event.getTarget(e);
YAHOO.util.Event.removeListener(el, 'click'); // kill existing handle
YAHOO.util.Event.addListener(el, 'click', killIt); // kill any future clicks
});
}
});
您也可以在单击它时禁用然后锚点。有点不同。直截了当,仅在您希望单击仅启用的锚上实现此功能。
【讨论】:
绝对没有理由仅仅为了动态禁用链接而使用庞大的 Javascript 框架。
<a href="/test" onmouseup="this.href='';" />
完成。
【讨论】:
我喜欢这个:
onmouseup="this.style.display='none';"
【讨论】: