我在验证表单实际上是子表单时遇到问题。
在我的网站中,我有某种表格和“添加行”按钮(BlockingAjaxSubmitLink)。当我尝试添加让说 2 行时,我收到验证错误(因为此表中的行具有 Required=True 参数)并且我无法添加另一行。我尝试使用简单的 AjaxLink,但它在 onClick 方法中没有对表单的引用,当我完成一些行并单击“添加行”时,这些数据会丢失。
我只想在“保存”按钮单击后启用验证。
知道如何处理这个问题吗?
我在验证表单实际上是子表单时遇到问题。
在我的网站中,我有某种表格和“添加行”按钮(BlockingAjaxSubmitLink)。当我尝试添加让说 2 行时,我收到验证错误(因为此表中的行具有 Required=True 参数)并且我无法添加另一行。我尝试使用简单的 AjaxLink,但它在 onClick 方法中没有对表单的引用,当我完成一些行并单击“添加行”时,这些数据会丢失。
我只想在“保存”按钮单击后启用验证。
知道如何处理这个问题吗?
根据您的结构,您可能正在使用setDefaultFormProcessing(true);
- http://ci.apache.org/projects/wicket/apidocs/6.x/org/apache/wicket/markup/html/form/AbstractSubmitLink.html#setDefaultFormProcessing禁用验证%28布尔值%29
我使用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
并且新的空对象正在从数据库中获取并在我的表中显示为新行结束。
现在我写一些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();
}
我知道这是一个丑陋的解决方案,但我想不出更好的办法......而且我无法关闭反馈消息