我正面临一个很难调试的问题。我有一个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 。我觉得很快就找不到了。如果有某种类型的日志记录或消息传递这些类型的问题会很好。
感谢。
答案 0 :(得分:0)
您遇到的错误不是 验证 错误(由验证拦截器处理),但在设置参数时发生错误(由参数拦截器引发)并且转换错误拦截器添加了一个你没有看到的fieldError,因为
theme="simple"
,这会强制您添加<s:fielderror fieldName="dataSource" />
以显示它(或<s:fielderror />
以显示所有内容)。阅读how the INPUT result works,将您的页面设置为INPUT页面,打印错误,然后您将发现问题,这很可能与您未指定{{1}这一事实有关您的选择中的}属性,即将描述而不是数据源的代码发送到listKey
,这可能是一个整数。
答案 1 :(得分:0)
我发现了问题。我需要一个列表的get方法,用于填充表单提交的操作中的选择下拉列表。
我有一个最初为页面调用的操作,但是当验证失败并从表单操作类重新加载该页面时,它会尝试重新填充选择下拉列表并需要在那里获取getter 。我觉得很快就找不到了。如果有某种类型的日志记录或消息传递这些类型的问题会很好。