0

我在验证表单实际上是子表单时遇到问题。

在我的网站中,我有某种表格和“添加行”按钮(BlockingAjaxSubmitLink)。当我尝试添加让说 2 行时,我收到验证错误(因为此表中的行具有 Required=True 参数)并且我无法添加另一行。我尝试使用简单的 AjaxLink,但它在 onClick 方法中没有对表单的引用,当我完成一些行并单击“添加行”时,这些数据会丢失。

我只想在“保存”按钮单击后启用验证。

知道如何处理这个问题吗?

4

3 回答 3

0

根据您的结构,您可能正在使用setDefaultFormProcessing(true);- http://ci.apache.org/projects/wicket/apidocs/6.x/org/apache/wicket/markup/html/form/AbstractSubmitLink.html#setDefaultFormProcessing禁用验证%28布尔值%29

于 2013-07-21T21:29:02.443 回答
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是 a WebMarkupContainer,其中包含ListView保存表行的 a。

当我单击此按钮时AjaxLink,代表我表中的一行的新对象被添加到数据库中,然后包含 的容器ListView正在刷新刷新,ListView并且新的空对象正在从数据库中获取并在我的表中显示为新行结束。

于 2013-07-21T20:10:38.997 回答
0

现在我写一些hack

首先我设置

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);
    //}
}

我oververide一种方法

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

我知道这是一个丑陋的解决方案,但我想不出更好的办法......而且我无法关闭反馈消息

于 2013-07-22T09:44:20.930 回答