0

フォームの実際のサブフォームの検証に問題があります。

私のWebサイトには、ある種のテーブルと「行の追加」ボタン(BlockingAjaxSubmitLink)があります。2 行を追加しようとすると、検証エラーが発生し (このテーブルの行に Required=True パラメーターがあるため)、別の行を追加できません。単純な AjaxLink を使用しようとしましたが、onClick メソッドでフォームへの参照がなく、いくつかの行を完了して [行の追加] をクリックすると、このデータが失われます。

「保存」ボタンをクリックした後にのみ検証を有効にしたい。

この問題に対処する方法はありますか?

4

3 に答える 3

0

を使用して、あなたが望むようなことをしますAjaxLink。私のAjaxLink

   private AjaxLink addNewRow = new AjaxLink("addNewRow") {
      @Override
      public void onClick(AjaxRequestTarget target) {
         MyEntityObject newTableRowObject = new MyEntityObject(irrelevantParameter);
         entityObjectTableService.createNewRowInDB(newTableRowObject );
         target.add(listViewContainer);
      }
   };

このコードでlistViewContainerは、 は、テーブル行を保持するWebMarkupContainerを含むです。ListView

これをクリックするAjaxLinkと、テーブルの行を表す新しいオブジェクトがデータベースに追加され、それを含むコンテナーListViewが更新されListView、新しい空のオブジェクトが DB からフェッチされ、テーブルの新しい行として表示されます。終わり。

于 2013-07-21T20:10:38.997 に答える
0

今のところ、私はある種のハックを書いています

最初に設定した

addKnowledgeLink.setDefaultFormProcessing(false);

そして次

    BlockingAjaxSubmitLink<Object> addKnowledgeLink = new BlockingAjaxSubmitLink<Object>(
                "link_knowledge_add") {
    @Override
    protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
        ChangeDataForm.this.process(this);

        /*  some code   */


        target.add(form.get(MY_CONTAINER_ID));
    }
(...)

そして私のハック...

//HACK
public void process(IFormSubmitter object){
    if (!isEnabledInHierarchy() || !isVisibleInHierarchy())
    {
        return;
    }
    // run validation
    validate();
        /*if (hasError())
    {
        // mark all children as invalid
        markFormComponentsInvalid();
            // let subclass handle error
        callOnError(object);
    }
    else
    {*/
        // mark all children as valid
        markFormComponentsValid();
            // before updating, call the interception method for clients
        beforeUpdateFormComponentModels();
            // Update model using form data
        updateFormComponentModels();
            // validate model objects after input values have been bound
        onValidateModelObjects();
        if (hasError())
        {
            callOnError(object);
            return;
        }
        // Form has no error
        delegateSubmit(object);
    //}
}

そして、私は1つの方法を覆します

@Override
    protected void onError(){
        super.onError();
        this.updateFormComponentModels();
    }

私はそれが醜い解決策であることを知っていますが、もっと良いものを見つけることができませんでした..そして、フィードバックメッセージをシャットダウンできませんでした

于 2013-07-22T09:44:20.930 に答える
0

構造によっては、次を使用して検証を無効にした後を見ている可能性がsetDefaultFormProcessing(true);あります%28ブール値%29

于 2013-07-21T21:29:02.443 に答える