1

データのバイト配列を持つactionscriptコンポーネントから呼び出されているjavascript関数があります。関数は正しく呼び出されており、受信しているデータを検証できます。

そのデータをウィケットに戻す必要がありますが、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

AjaxEventBehaviorの代わりにAjaxFormComponentUpdatingBehaviorを使用してください。これは、コンバーターとすべてのバリデーターが実行された後にコンテンツをモデルにプッシュするためのものです...入力が変換または検証に合格しない場合、モデルは更新されず、onErrorメソッドが呼び出されることに注意してください(対onUpdateメソッド)。

新しい動作への切り替えに加えて、他のすべては同じままであることができるはずです。

于 2012-07-19T19:45:32.570 に答える