【发布时间】:2016-06-09 07:22:57
【问题描述】:
我有一些 ajax 行为,应该使用 JS 选择一些数据,然后将其转回 Java。有时它可以工作,但通常只是添加 url 参数并进行页面刷新/
public abstract class LoggedVKIdBehaviour extends AbstractDefaultAjaxBehavior {
private static final Logger logger = LoggerFactory.getLogger(LoggedVKIdBehaviour.class);
@Override
protected void respond(AjaxRequestTarget target) {
String loggedVkId = RequestCycle.get().getRequest().getRequestParameters().getParameterValue("logged_vkid").toString();
logger.info("ajax has comming with logged VK ID " + loggedVkId);
recived(target, loggedVkId);
}
protected abstract void recived(AjaxRequestTarget target, String loggedVkId);
@Override
public void renderHead(final Component component, IHeaderResponse response) {
super.renderHead(component, response);
Map<String, Object> map = new HashMap<>();
map.put("callbackFunction", getCallbackFunction(CallbackParameter.explicit("logged_vkid")));
//
PackageTextTemplate ptt = new PackageTextTemplate(LoggedVKIdBehaviour.class, "vkid_callback.js");
OnDomReadyHeaderItem onDomReadyHeaderItem = OnDomReadyHeaderItem.forScript(ptt.asString(map));
response.render(onDomReadyHeaderItem);
}
}
js 模板
var calback = ${callbackFunction};
var logged_vk_id = 11;
function authInfo(response) {
if (response.session) {
logged_vk_id = response.session.mid;
calback(response.session.mid);
console.log("recived callback from VK " + logged_vk_id);
}
}
$(document).ready(function () {
VK.Auth.getLoginStatus(authInfo);
});
据我了解 Ajaj 技术 - 它是异步请求,根本不应该触及主 URL。那么页面刷新的原因是什么呢?
这是生成的回调函数
function (logged_vkid) {
var attrs = {"u":"../wicket/bookmarkable/com.tac.kulik.pages.product.ProductPage?12-1.IBehaviorListener.0-&productID=1"};
var params = [{"name":"logged_vkid","value":logged_vkid}];
attrs.ep = params.concat(attrs.ep || []);
Wicket.Ajax.ajax(attrs);
}
我使用 wicket 7.2
【问题讨论】:
-
${callbackFunction}的生成替换是什么? -
我觉得不错。不知道那里出了什么问题。
-
新闻很少。它来自父面板。在 recived(...) 方法的实现中,我一直在将父面板添加到目标。删除此行页面后不做循环刷新。但无论如何它都不能解决问题。在此页面上,我还有无状态表单,其标签带有 AjaxSelfUpdatingBehavior,持续时间为 5 秒。在这种情况下,我还刷新了整个页面,而不仅仅是一个标签
-
如果你能在一个小的演示应用程序中重现这个,我很乐意看看!
-
将尝试。但也可以共享整个项目。我很乐意给我任何反馈。关于源代码。万一我做的一切都在我的想象中。我擅长 Android,但至于 wicket-spring-ajax 就没有那么多了。可以在某个通话地点向您展示,以及重现的步骤。顺便准备演示项目))
标签: javascript ajax wicket