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

时间:2017-04-26 00:05:32

标签: validation jsp struts2 struts2-interceptors interceptorstack

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

这很好用,但是当我在表单外添加一个下拉框时,验证现在失败了。相反,它会重定向到一个空白页面,而我的动作类中的断点不会被击中。

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

以下是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方法,用于填充表单提交的操作中的选择下拉列表。

我有一个最初为页面调用的操作,但是当验证失败并从表单操作类重新加载该页面时,它会尝试重新填充选择下拉列表并需要在那里获取getter 。我觉得很快就找不到了。如果有某种类型的日志记录或消息传递这些类型的问题会很好。

感谢。

2 个答案:

答案 0 :(得分:0)

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

  1. 您的INPUT结果落在空白页面上
  2. 您在文本字段中使用theme="simple",这会强制您添加<s:fielderror fieldName="dataSource" />以显示它(或<s:fielderror />以显示所有内容)。
  3. 阅读how the INPUT result works,将您的页面设置为INPUT页面,打印错误,然后您将发现问题,这很可能与您未指定{{1}这一事实有关您的选择中的}属性,即将描述而不是数据源的代码发送到listKey,这可能是一个整数。

答案 1 :(得分:0)

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

我有一个最初为页面调用的操作,但是当验证失败并从表单操作类重新加载该页面时,它会尝试重新填充选择下拉列表并需要在那里获取getter 。我觉得很快就找不到了。如果有某种类型的日志记录或消息传递这些类型的问题会很好。