受 form-binder-java 的启发,对代码做了些重构和简化:
从 Mapping / Constraint / PreProcessor 移除了 类型参数 InputMode,只在某些必要的地方做运行时检查。现在所有的 Constraint / PreProcessor 实现都可以和不同 Mapping 自由搭配,具体的影响范围一般由对应的 Mapping 决定。
touched checker 由 field name list 改为 (name, data) => true|false 型的函数,允许有不同的实现,用于运行时判断一个 field 是否被用户曾经编辑(touch) 过。
FormBinder 只用于纯粹的启动 bind/validate 的类,不再关联 Constraint / PreProcessor 了。
p.s. 有些改动可能会影响现有代码,但我不打算在这一一列出了,因为升级过程中你很容易能发现并解决。
-----------------------------------------------
另,本打算请求添加到 Scalatra 官方文档中的,但是 fork 它 site 项目后,发现这个 Ruby 项目运行不起来,自己折腾了好久,也没搞定。 所以,就一拖拖到现在了。 也许要再做些努力。