我正在使用Struts 1.1的验证框架。当验证失败时,整个表单将被重置。
经过大量时间搜索网后,我已经聚集在一起:
这就是我遇到问题的地方。如果验证失败,并且我将输入参数设置为同一页面,则会再次调用reset(),但它不会使用最初加载表单时的bean值。因此用户必须重新输入所有内容。
此操作的动作映射类如下所示:
<action
path="/edit/componentRelease"
type="org.twdata.struts.SpringAction"
name="edit/componentRelease"
scope="request"
input="/WEB-INF/jsp/edit/editComponentRelease.jsp"
parameter="edit/componentRelease"
validate="true"
>
<forward
name="edit/componentRelease"
path="/WEB-INF/jsp/edit/editComponentRelease.jsp"
redirect="false"
/>
</action>
用于显示bean的表单以:
开头<html:form method="post" name="componentReleaseEditor" type="com.mx.releasemgr.forms.ComponentReleaseEditorForm" action="/edit/componentRelease">
答案 0 :(得分:1)
reset()用于清除先前输入的值...如果你调试它,然后看看你会知道。例如,你在表格中输入1然后再提交并再次进入相同的表格并输入2并再次提交现在重置将会清除1和现在2,因此你在你的验证()部分得到2。 / p>
答案 1 :(得分:1)
@Override
public void reset(ActionMapping mapping, HttpServletRequest request) {
//If Clear button click will set date as today and clear all other value
//If Insert, update with validation as failure than not clear all value on the form, but only clear that wrong when validation (means skipp all value as true on the form and only clear value wrong)
String actionName = request.getParameter("method");
if(actionName!=null){
if (actionName.equals(Enums.ActionName.CLEAR.getActionName())) {
Date date = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
this.setPublicationDay(dateFormat.format(date));
}
else{
request.setAttribute("book", this);
}
}
super.reset(mapping, request);
}
答案 2 :(得分:0)
解决方案是将表单的显示移动到与用于转发的操作不同的操作。在我的例子中,它们都是相同的。