1

我有一个 javascript 函数,该函数从带有字节数据数组的 actionscript 组件中调用。该函数被正确调用,我可以验证接收到的数据。

我需要将该数据取回检票口,但如果我使用 javascript 设置组件的值并触发 onChange 事件,我会看到该事件但组件的模型尚未更新,例如:

Javascript 函数

<script type="text/javascript">
    function f(obj) {
        document.getElementById("byteArray").value = obj.byteArray;
        document.getElementById("byteArray").onchange();                
    }
</script>

检票口行为

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 错误,因为我的字节数组太大。

有任何想法吗?

4

1 回答 1

4

使用AjaxFormComponentUpdatingBehavior而不是 AjaxEventBehavior。它用于在转换器和所有验证器运行后将内容推送到模型中......请记住,如果输入未通过转换或验证,它将不会更新模型,而是会调用 onError 方法(与 onUpdate 方法相比)。

除了切换到新行为之外,其他一切都应该能够保持不变。

于 2012-07-19T19:45:32.570 回答