2

我正在使用 Spring Web Flow 2.3,并且我有一个页面,上面有两个表单,根据提交的表单转换到不同的位置。为了实现这一点,我为我的视图状态创建了一个复合模型对象,其中包含两个表单。我看到的问题是,如果触发了转换 A,我只想验证表单 A,同样使用表单 B - 如果触发了 B 转换,我只想验证 B。我不确定如何指明要验证的表格。为每个转换验证整个复合表单的视图状态:

<view-state model="compositeForm">
    <transition on="formAsubmit" to="formApage" validate="true"/>
    <transition on="formBsubmit" to="formBpage" validate="true"/>
</view-state>

有谁知道我如何触发自定义验证器根据触发的转换进行不同的验证?

谢谢你的帮助。

史蒂夫

4

3 回答 3

3

我不知道每个的自定义验证器,但在您的验证方法中,我认为您可以使用RequestContextHolder.getRequestContext()togetCurrentTransition()getCurrentEvent()手动比较该getId()值。

于 2013-01-28T16:48:51.067 回答
1

我最终做的是在提交表单 B 时手动触发我的验证,并转换到检查是否存在验证错误的决策状态。这有点难看,但我觉得这是最好的方法:

<view-state id="start" model="compositeForm">
    <transition on="formAsubmit" to="pageA" validate="true"/>
    <transition on="formBsubmit" to="isFormBValid" validate="false">
        <evaluate expression="formBValidator.validate(compositeForm.formB, messageContext)"/>
    </transition
</view-state>

<decision-state id="isFormBValid">
    <if test="messageContext.hasErrorMessages()" then="start" else="pageB"/>
</decision-state>
于 2013-02-08T06:37:41.347 回答
0

这不是最好的解决方案,但至少可以解决问题。这就是我在 vlaidator 中获得转换 ID 和视图状态 ID 的方式。

过渡编号

RequestContextHolder.getRequestContext().getFlowExecutionContext().getActiveSession().getState().getId();

视图状态 ID

 RequestContextHolder.getRequestContext().getFlowExecutionContext().getActiveSession().getState().getId();
于 2017-05-27T15:56:43.867 回答