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,它你没有看到是因为
- 您的 INPUT 结果出现在空白页上并且
- 您在文本字段上使用了
theme="simple"
,这迫使您添加 <s:fielderror fieldName="dataSource" />
来显示它(或 <s:fielderror />
来显示它们)。
阅读how the INPUT result works,将你的页面设置为INPUT页面,打印错误,然后你会发现问题,这很可能与你没有指定listKey
属性中的 select,即将描述而不是数据源代码发送到 selectedDataSource
,这可能是一个整数。
我发现了问题。我需要一个列表的 get 方法,用于填充表单提交到的操作中的 select 下拉列表。
我有一个用于最初为页面调用的操作,但是当验证失败并且它从表单操作 class 重新加载该页面时,它会尝试重新填充 select 下拉并需要一个 getter 。我为没有早点找到它而感到愚蠢。如果这些类型的问题有某种类型的日志记录或消息传递,那就太好了。
我遇到了一个很难调试的问题。我有一个 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,它你没有看到是因为
- 您的 INPUT 结果出现在空白页上并且
- 您在文本字段上使用了
theme="simple"
,这迫使您添加<s:fielderror fieldName="dataSource" />
来显示它(或<s:fielderror />
来显示它们)。
阅读how the INPUT result works,将你的页面设置为INPUT页面,打印错误,然后你会发现问题,这很可能与你没有指定listKey
属性中的 select,即将描述而不是数据源代码发送到 selectedDataSource
,这可能是一个整数。
我发现了问题。我需要一个列表的 get 方法,用于填充表单提交到的操作中的 select 下拉列表。
我有一个用于最初为页面调用的操作,但是当验证失败并且它从表单操作 class 重新加载该页面时,它会尝试重新填充 select 下拉并需要一个 getter 。我为没有早点找到它而感到愚蠢。如果这些类型的问题有某种类型的日志记录或消息传递,那就太好了。