2017-02-01 30 views
0

私はチェックボックスとテキストエリアでウィッケットフォームを持っています。 チェックボックスの値が変更されたら、テキストエリアを非表示にして表示する必要があります。私はテキストエリアにいくつかの情報を入力して、私のタイプされた情報を失う二回(非表示と表示のテキストエリア)チェックボックスをクリックしますApache Wicket:テキストエリアが非表示/表示後にコンテンツを失う

private class EditCommentForm extends Form { 

    private TextArea applyToAllArea; 
    private boolean addToAll; 

    // some code here 

    public EditCommentForm(String id) { 
     super(id); 
     applyToAllArea = new TextArea<>("applyToAllArea", Model.of("")); 
     applyToAllArea.setVisible(addToAll); 
     applyToAllArea.setOutputMarkupId(true); 
     applyToAllArea.setOutputMarkupPlaceholderTag(true); 
     add(applyToAllArea); 

     CheckBox addToAllCheckbox = new AjaxCheckBox("addToAll", new PropertyModel<>(this, "addToAll")) { 
      @Override 
      protected void onUpdate(AjaxRequestTarget target) { 
       applyToAllArea.setVisible(addToAll); 
       target.addComponent(applyToAllArea); 
      } 
     }; 
     addToAllCheckbox.setVisible(documents.size() > 1); 
     add(addToAllCheckbox); 
     // some code here 
    } 

    private boolean isAddToAll() { 
     return addToAll; 
    } 

} 

は、これが私の実装です。

フォームの送信を行わずに入力情報を保存するにはどうすればよいですか? @bertが問題を説明したように

Wicketのバージョン1.4.20

+1

'''applyToAllArea.setVisible(addToAll) '"は、Ajax呼び出しの後に、テキスト領域がもうdomの一部でないようにします。したがって、入力はすべて失われます。サブミットし、コンポーネントに値を格納する必要があります。 Wicket 1.4?本当に? – bert

+0

@bertコメントありがとうございました –

答えて

3

は、テキストエリアの内容は、とにかくと再描画のWicketが空で、サーバー側で現在のモデルを使用した後、保存されていないということです。

簡単な解決策は、ユーザーがページ内の別の要素に移動したときに内容が保存されるように、テキストエリアにnew AjaxFormComponentUpdatingBehavior("onblur")を追加することです。

少なくとも1.4.22にアップグレードすることをお勧めします。 1.4.20と比較して、セキュリティ関連の修正はほとんどありません。

+0

ありがとうございました!あなたは私の問題を解決する。 –

+0

答えを更新してください。動作は次のようにする必要があります:new AjaxFormComponentUpdatingBehavior( "onblur") –

+0

ああ、そうです! 1.4.xを使用します。 6.0.0以来、ちょうど 'ぼけ 'です –

関連する問題