0

我面临一个很难调试的问题。我有一个 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。我为没有早点找到它而感到愚蠢。如果这些类型的问题有某种类型的日志记录或消息传递,那就太好了。

谢谢。

4

2 回答 2

0

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

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

阅读INPUT 结果如何工作,将您的页面设置为 INPUT 页面,打印错误,然后您会发现问题,这很可能与您没有listKey在选择中指定属性的事实有关,即发送description 而不是数据源的代码 to selectedDataSource,这可能是一个整数。

于 2017-04-26T08:40:23.960 回答
0

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

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

于 2017-04-26T18:37:51.533 回答