我正在使用Spring Web Flow 2.3,我有一个页面,上面有两个表单,根据提交的内容转换到不同的地方。为了实现这一点,我有一个复合模型对象用于我的视图状态,它包含两个表单。我看到的问题是,如果转换A被触发,我只想验证表单A,同样使用表单B - 只想验证B,如果B转换被触发。我不知道如何指出要验证的表格。查看正在验证每个转换的整个compositeForm的状态:
<view-state model="compositeForm">
<transition on="formAsubmit" to="formApage" validate="true"/>
<transition on="formBsubmit" to="formBpage" validate="true"/>
</view-state>
是否有人知道如何触发自定义验证器以根据触发的转换进行不同的验证?
谢谢你的帮助。
史蒂夫
答案 0 :(得分:3)
我不知道每个的自定义验证器,但在您的验证方法中,我认为您可以使用RequestContextHolder.getRequestContext()
到getCurrentTransition()
或getCurrentEvent()
并手动比较{ {1}}值。
答案 1 :(得分: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>
答案 2 :(得分:0)
这不是最佳解决方案,但至少可以解决问题。这就是我在vlaidator中获取转换ID和视图状态ID的方式。
转换ID
RequestContextHolder.getRequestContext().getFlowExecutionContext().getActiveSession().getState().getId();
view-state id
RequestContextHolder.getRequestContext().getFlowExecutionContext().getActiveSession().getState().getId();