我有一个相当复杂的表单,包含许多输入和验证器。对于用户而言,完成这个表单需要相当长的时间(甚至超过一小时),因此他们希望能够保存草稿数据,即使违反了必填字段未填写等规则。
我认为这个问题在许多网络应用程序中都很常见,但是找不到任何公认的模式来实现这一点。请问如何实现?
目前我能看到以下几个选项:
- 在“保存草稿”按钮上使用immediate=true无法解决问题,因为UI数据将不会存储在bean中,所以我将无法访问它。从技术上讲,我可以在UI组件树中找到数据,但是遍历该树似乎不是一个好主意。
- 从页面中删除所有字段验证,并在表单定义的操作侦听器中以编程方式验证数据。同样不是一个好主意,表单非常复杂,有很多字段,因此通过这种方式实现的验证非常混乱。
- 实现自己的验证器,由某个请求属性控制,该属性将设置为标准表单提交(期望进行完整验证)并且将在“保存草稿”提交时取消设置(此时应跳过验证)。同样不是一个好的解决方案,我需要为我使用的所有验证器提供自己的包装器。
但正如您所看到的,没有一种方法是真正合理的。难道没有简单的解决方案吗?