Struts 2 XML 添加不需要验证的新元素时,表单验证会中断

Struts 2 XML form validation breaks when new element that does not need validation is added

我遇到了一个很难调试的问题。我有一个 JSP 页面,上面有一些提交给 Struts2 操作的表单元素。我还有一个 XML 表单验证文件来对提交的字段执行一些验证。该文件的命名约定为 'actionName-validation.xml'

这工作正常,但是当我在表单外添加下拉框时,验证现在失败了。相反,它重定向到一个空白页面,我的操作断点 class 没有命中。

有没有办法为验证打开某种调试或日志记录?为什么在表单外添加标签会导致这种情况发生?

这是 JSP 页面上的代码:

<s:select id="dataSource" name="selectedDataSource" theme="simple" listValue="top" 
   headerKey="" headerValue="Choose Data" list="dataSources" size="1" />

<div id="forms">
    <s:form method="post" action="MyAction" theme="simple">
      <p>
          <label class="input" for="name"
          <span style="color:red;">*</span>
          <span>Name</span><br>
          <s:textfield theme="simple" name="name" maxlength="11" size="11" />
          <br>
          <s:fielderror theme="plain"><s:param value="'name'" /</s:fielderror></label>

      </p>    
      <s:submit value="Create New" theme="simple" cssStyle="display: block; clear: left;"/>

    </s:form>
</div>

如果我删除 <s:select> 标签,它会起作用。

如有任何帮助,我们将不胜感激。

EDIT2: 我发现了问题。我需要一个列表的 get 方法,用于填充表单提交到的操作中的 select 下拉列表。

我有一个用于最初为页面调用的操作,但是当验证失败并且它从表单操作 class 重新加载该页面时,它会尝试重新填充 select 下拉并需要一个 getter 。我为没有早点找到它而感到愚蠢。如果这些类型的问题有某种类型的日志记录或消息传递,那就太好了。

谢谢。

您遇到的错误不是 验证 错误(由 验证拦截器), 但在设置参数时发生错误(由 Parameters Interceptor 引发)并且 Conversion Error Interceptor 添加了一个 fieldError,它你没有看到是因为

  1. 您的 INPUT 结果出现在空白页上并且
  2. 您在文本字段上使用了 theme="simple",这迫使您添加 <s:fielderror fieldName="dataSource" /> 来显示它(或 <s:fielderror /> 来显示它们)。

阅读how the INPUT result works,将你的页面设置为INPUT页面,打印错误,然后你会发现问题,这很可能与你没有指定listKey 属性中的 select,即将描述而不是数据源代码发送到 selectedDataSource,这可能是一个整数。

我发现了问题。我需要一个列表的 get 方法,用于填充表单提交到的操作中的 select 下拉列表。

我有一个用于最初为页面调用的操作,但是当验证失败并且它从表单操作 class 重新加载该页面时,它会尝试重新填充 select 下拉并需要一个 getter 。我为没有早点找到它而感到愚蠢。如果这些类型的问题有某种类型的日志记录或消息传递,那就太好了。