我有一个 javascript 函数,它是从一个带有字节数据数组的 actionscript 组件调用的。该函数被正确调用,我可以验证接收到的数据。
我需要将该数据返回到 Wicket 口,但如果我使用 javascript 设置组件的值并触发 onChange 事件,我会看到该事件但组件的模型尚未更新,例如:
Javascript 函数
<script type="text/javascript">
function f(obj) {
document.getElementById("byteArray").value = obj.byteArray;
document.getElementById("byteArray").onchange();
}
</script>
Wicket 口行为
final TextField field = new TextField("byteArray", Model.of(""));
field.add(new AjaxEventBehavior("onChange") {
@Override
protected void onEvent(AjaxRequestTarget target) {
String byteArray = getComponent().getDefaultModelObjectAsString());
// byteArray has not changed here
}
});
我尝试过使用 PropertyModel 和 IModel 实现,但并不愉快。我已经能够使用表单提交将数据返回到 Wicket 中,但这会强制刷新页面,这对我的应用程序不利。我无法从 Javascript 以编程方式成功触发任何类型的 AjaxFormSubmission 事件。
我曾尝试使用 wicketAjaxGet/Post 提交数据,但我收到 413 错误,因为我的字节数组太大。
有什么想法吗?
最佳答案
使用 AjaxFormComponentUpdatingBehavior 而不是 AjaxEventBehavior。它用于在转换器和所有验证器运行后将内容推送到模型中......请记住,如果输入未通过转换或验证,它不会更新模型,而是调用 onError 方法(与 onUpdate 方法相比)。
除了切换到新行为之外,其他一切都应该能够保持不变。
关于javascript - 我可以从 javascript 强制对 wicket 组件进行模型更新吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11561467/