为什么struts在验证失败后会重置我的表单?

时间:2012-03-19 18:10:23

标签: validation struts reset

我正在使用Struts 1.1的验证框架。当验证失败时,整个表单将被重置。

经过大量时间搜索网后,我已经聚集在一起:

  1. 当收到新请求时,如果当前范围(请求或会话)中不存在表单对象,则创建该表单对象。
  2. 重置称为()
  3. 从bean属性中填充表单值。
  4. 启用验证后启用
  5. 如果验证失败,则返回ActionErrors,并将请求定向到我的struts-config.xml中action标签的input属性给出的URI。
  6. 这就是我遇到问题的地方。如果验证失败,并且我将输入参数设置为同一页面,则会再次调用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">
    

3 个答案:

答案 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)

解决方案是将表单的显示移动到与用于转发的操作不同的操作。在我的例子中,它们都是相同的。