在AjaxLink中一个接一个地调用几个不同的JavaScript



当我点击AjaxLink时,我希望首先在客户端通过JavaScript进行验证(因为会查询LocalStorage(,然后根据结果进行进一步的JavaScript调用。我怎样才能做到这一点?在伪代码中,它看起来像这样:

new AjaxLink<>("myId", myModel) {
@Override
public void onClick(AjaxRequestTarget target) {
boolean isCounterValid = target.appendJavaScript(checkCounter()); // i know that this is not possible, therefore pseudo code
if(isCounterValid) {
target.appendJavaScript(someOtherJavaScript());
}
else {
target.appendJavaScript(anotherJavaScript());
}
}
private String checkCounter() {
return "var count = window.localStorage.getItem('myCounter'); return count !== 1;";
}
private String someOtherJavaScript() {
return "change something";
}
private String anotherJavaScript() {
return "change other thing";
}
};

单击链接时,需要通过Ajax调用发送额外的请求参数。为此,您应该覆盖AjaxLink:的updateAjaxAttributes(AjaxRequestAttributes attributes)方法

@Override
protected void updateAjaxAttributes(AjaxRequestAttributes attributes)
{
attributes.getDynamicExtraParameters().add("var count = window.localStorage.getItem('myCounter'); return [{"name":"count", "value": count}]");
}

AjaxLink#onClick()中,您可以通过以下方式读取计数:

int count = getRequest().getRequestParameters().getParameterValue("count").toInt();

AJAX组件和行为可以自定义AJAX属性,覆盖updateAjaxAttributes,并使用AjaxCallListener的自定义实现,该实现公开了挂接AJAX请求周期的不同方法。在这种情况下,您可以使用AjaxCallListener#getBeforeSendHandler。有关此主题的完整介绍(带示例(,请参阅用户指南:

https://ci.apache.org/projects/wicket/guide/8.x/single.html#_ajax_request_attributes_and_call_listeners

最新更新