javascript - 我可以从 javascript 强制对 wicket 组件进行模型更新吗?

标签 javascript wicket

我有一个 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/

相关文章:

java - 如何为 wicket DownloadLink 编写单元测试?

javascript - 元素特定区域的背景颜色

javascript - 获取对象内部的函数名称

javascript - 如何解决 JavaScript 中的正则表达式匹配/替换问题?

javascript - 使用外部 Node 脚本连接到已在index.js中定义的socket-io

ajax - Wicket 禁用 ComponentListener 禁用整个页面

javascript - 将链接插入 react 工具提示

wicket - 以编程方式将 "Choose One"替换为另一个文本

java - 使用 wicket 1.5 添加可用于应用程序中所有组件的 css 资源

java - 在 Spring+Wicket 中上传文件