【问题标题】:How to debug a Spring webflow submit that does nothing and throws no exceptions如何调试不执行任何操作且不引发异常的 Spring webflow 提交
【发布时间】:2012-04-18 19:22:30
【问题描述】:

我有 spring 2.5 应用程序,并且流程中的几个页面运行良好 - 它们根据我的 flow.xml 进行。 “损坏”的页面在表单中提交:

<input type="image" name="_eventId_submit" src="<c:url value="images/continue.png" />" />

此页面的流程定义看起来正确:

<view-state id="coverages" view="tiles.coverages" model="rtrForm">
    <on-entry>
 ...
    </on-entry>
    <transition on="submit" to="policyVehicleDetailsDecisionForward">
        <evaluate expression="coverageFormAction.bindAndValidate" />
        <evaluate expression="coverageFormAction.evaluateCoverages(rtrForm)" />
    </transition>
</view-state>

我在 mainFlowAction.evaluateCoverages(...) 中有调试语句,我在日志文件中没有看到这一点,但我也没有看到任何异常 - 有人知道从这里去哪里吗?我已将 eclipse 附加到 Tomcat 6.0.33 以进行远程调试,但我仍然没有看到任何异常...我在这一点上被难住了,不知道如何解决这个问题 - 任何帮助或欢迎提出建议。

所以我更进一步,我已经覆盖了 QuoteFormAction.bindAndValidate() 方法,遗憾的是,我没有在日志中看到此方法被调用 - 所以我假设此时表单甚至没有调用它...我使用的模式与所有有效页面的模式相同。我已经缩写了表格 - 也许我忽略了一些明显的东西:

<form id="rtrForm" action="/rtrSite/main.svc?execution=e1s5" method="post">
...
<select name="quoteForm.policyLevelCoverages.towing" class="violationType" id="TOWING"  validate="selectOneOption" req="">
...
<select name="quoteForm.vehicleLevelCoverages[0].rental" class="violationType" id="RENTAL"  validate="selectOneOption" req="">
...
<input type="image" name="_eventId_submit" src="images/continue.png" />
<input type="image" name="_eventId_save" src="images/save.png" value='Save -n- Return' />
<input type="image" src="images/back.png" name="_eventId_back" value='Back' />
<input type="reset" id="reset" />
</form>

JSP 表单生成:

<c:forEach var="policyCoverageList" varStatus="policyCoverageStatus" items="${quoteForm.coverages.jspCoverageCodesPolLevel}">

          <spring:bind path="quoteForm.policyLevelCoverages.${fn:toLowerCase(policyCoverageList.coverageCode)}" >
           <select name="${status.expression}" class="violationType" id="${policyCoverageList.coverageCode}"  validate="selectOneOption" req="">
                <c:if test="${policyCoverageList.isRequired == 'N'}">
                   <option value="-1"><spring:message code="coverage.decline" /></option>
                 </c:if>
                 <c:forEach var="policyCoverage" items="${policyCoverageList.limits}">
                     <option value="${policyCoverage.id}" <c:if test="${policyCoverage == 'TODO'}">SELECTED</c:if>>
                          ${policyCoverage.coverageLimits}
                      </option>
                  </c:forEach>
              </select>
           </spring:bind>

</c:forEach>

【问题讨论】:

  • 我的建议:使用 Firebug 验证客户端代码是否有问题
  • Carlos - 我添加了萤火虫,然后我去了控制台,但我什么也没看到,我应该打开一个特定的选项卡吗?
  • John 之前的回答说要添加 form:errors 标签。我的表格有一个类似于他建议的版本。我有: 提交后它总是会返回到 tiles.coverages
  • @gskidmor 抱歉没有意识到我已经删除了它。 form:errors 是否显示任何绑定/验证错误?

标签: spring spring-mvc spring-webflow


【解决方案1】:

在记录器中打开调试级别

<logger
        name="org.springframework.webflow">
        <level value="debug" />
    </logger>

您将在控制台/日志文件中看到消息,这将帮助您找出问题

【讨论】:

    【解决方案2】:

    是否每次都返回"tiles.coverages" 视图?如果是这样,我会假设您遇到某种绑定/验证错误。在jsp中输入&lt;form:errors path="*"/&gt;看看是不是真的。

    编辑:

    这两个选择都是非空的,第二个不是空的吗?所以对于

    quoteForm.vehicleLevelCoverages[0].rental
    

    vehicleLevelCoverages 列表/数组中至少有一个元素?

    一侧不:

    您使用的是 Spring Weblflow 2 吗?如果你是你不需要做 bindAndValidate 无论如何它都会为你做。

    【讨论】:

    • 我确实验证了我有 form:errors 并且它确实返回到了 tiles.coverages 页面。我只是快速覆盖了 CoveragesFormAction 中的 bindAndValidate 方法来记录任何异常并且没有出现......这会默默地失败吗?
    • 不,它们不仅会失败,还会传播到 servlet 容器。你知道你得到了哪些表格错误吗?您是否偶然绑定了Date
    • 我只是仔细检查了一下,绑定时列表中至少有一个元素。我正在使用 webflow 2.5 - 你是在 flow.xml 中说我不必显式调用 bindAndValidate 吗? (这样做不会有什么坏处吧?)
    • 我不确定它是否会有所帮助或伤害,但视图状态元素中有两个属性 bind=true/falsevalidate=true/false 所以无论如何它都会这样做两次。但是,如果您想在不验证的情况下从一种状态转换到另一种状态,则需要声明 validate=false
    • 接下来我会尝试一次删除其中的每个元素,看看它们中的任何一个是否导致绑定失败。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-30
    • 1970-01-01
    • 2012-11-07
    • 1970-01-01
    • 2012-08-01
    • 1970-01-01
    • 2018-12-30
    相关资源
    最近更新 更多