我在表格实际上以子表格验证时遇到问题。
在我的网站上,我有一些表格和“添加行”按钮(BlockingAjaxSubmitLink)。 当我尝试添加let say 2行时,我得到验证错误(因为此表中的行具有Required = True参数)并且我无法添加另一行。我尝试使用简单的AjaxLink,但它没有在onClick方法中引用表单,当我完成一些行并单击“添加行”时,这些数据就会丢失。
我想在“点击”按钮点击后才启用验证。
知道如何处理这个问题吗?
答案 0 :(得分: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中获取空对象,并在最后显示为表中的新行。
答案 1 :(得分:0)
根据您的结构,您可能正在考虑使用setDefaultFormProcessing(true);
- http://ci.apache.org/projects/wicket/apidocs/6.x/org/apache/wicket/markup/html/form/AbstractSubmitLink.html#setDefaultFormProcessing%28boolean%29
答案 2 :(得分: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);
//}
}
我想要一种方法
@Override
protected void onError(){
super.onError();
this.updateFormComponentModels();
}
我知道这是一个丑陋的解决方案,但我无法找到更好的东西.. 我无法关闭反馈消息