我遇到的情况是,如果允许编辑项目的表单具有空字段,则不会调用Struts操作。该页面通过freeMarker模板自定义。调用来到拦截器并成功传递,然后在调用action方法之前被删除。因此,我没有看到任何错误消息,以弄清楚什么是错误的。 如果该字段不为空,则操作将完成,项目将更新。
这是我对拦截器的Struts配置,看起来没问题。
<action name="upDate" method="upDate" class="com.coll.Item">
<result name="success">jsp/item.jsp</result>
<result name="input">jsp/item.jsp</result>
</action>
这是Struts.xml中的操作
<tr>
<td>Prior Order Number</td>
<td><@s.textfield name="item.prevOrdNum" id="prevOrdNum" theme="simple"/></td>
</tr>
item.ftl中的字段如下所示
UIViewController
另一个令人费解的因素是,由于这是一个小型的内部应用程序,它多年来一直没有更新,但这个问题几个星期前就开始了。如果我在网页中完全删除该字段,或者我在数据库中为该字段添加了一个值,那么在加载时它不是空的 - 更新将通过。我很感激任何可以解释最新情况的想法。
答案 0 :(得分:1)
您最有可能以下列情况之一结束:
validate()
方法,XML,注释等...)进行了一些验证,指定该字段不能为空。 In either case, the Workflow interceptor will return an INPUT
result,您已经映射到同一个JSP页面,这没有错,但仅凭这一点还不足以知道INPUT
和SUCCESS
之间的哪一个结果已经退回。
转换错误和字段验证错误会在FieldErrors地图中显示错误消息,而不是在ActionErrors地图中(您可能会在页面顶部打印<s:actionerror />
tag)。
使用默认主题XHTML
,每个fieldError
都会打印在它所属的字段附近;但是,您已使用simple
主题作为标记,因此不会自动打印字段错误。
您有两种选择:
在页面顶部打印所有字段错误:
<style type="text/css">
.error { border: 5px solid red; }
</style>
<@s.if test="hasFieldErrors()">
<div class="error">
<@s.fielderror />
</div>
</@s.if>
或手动将<s:fielderror/>
tags附加到您的字段:
<tr>
<td>Prior Order Number</td>
<td>
<@s.textfield name="item.prevOrdNum" id="prevOrdNum" theme="simple"/>
<@s.fielderror fieldName="item.prevOrdNum" />
</td>
</tr>