当我的模型可以用简单类型而不是自定义bean表示时,有没有合理的方法来利用Spring绑定?
当您的模型复杂到足以保证自定义域对象时,Spring绑定可以很好地工作,但有时应用程序只需要从用户那里接收一段简单的数据,而用户并不真正保证域对象。然而,似乎没有任何办法来处理这个案件 例如,我们有一个表单,提示用户输入激活码,仅此而已。这可以很容易地用字符串表示。在另一个页面上,我们要求用户接受协议,并通过选中复选框表示接受,然后提交表单。这很容易用布尔值表示 不幸的是,我还没有找到任何方法来绑定这些简单类型,并且仍然保留Spring为表带来的附加值。在本例中,我特别希望使用它的验证,并通过标记向用户公开验证错误。我最终编写了一个几乎毫无意义的类,如下所示:当我的模型可以用简单类型而不是自定义bean表示时,有没有合理的方法来利用Spring绑定?,spring,forms,binding,spring-mvc,simpletype,Spring,Forms,Binding,Spring Mvc,Simpletype,当您的模型复杂到足以保证自定义域对象时,Spring绑定可以很好地工作,但有时应用程序只需要从用户那里接收一段简单的数据,而用户并不真正保证域对象。然而,似乎没有任何办法来处理这个案件 例如,我们有一个表单,提示用户输入激活码,仅此而已。这可以很容易地用字符串表示。在另一个页面上,我们要求用户接受协议,并通过选中复选框表示接受,然后提交表单。这很容易用布尔值表示 不幸的是,我还没有找到任何方法来绑定这些简单类型,并且仍然保留Spring为表带来的附加值。在本例中,我特别希望使用它的验证,并通过标
public class VerificationBean {
private String pin;
public String getPin() {
return pin;
}
public void setPin(String pin) {
this.pin = pin;
}
}
我曾想过只使用常规标记,并使用@RequestParam注释将用户的输入拉到我的处理程序方法中,这样做已经足够好了,但是处理验证会变得很麻烦,因为没有为您提供BindingResult或模型来处理,通过将错误关联起来的想法也就不存在了。因此,创建一个简单的容器类并使用人们熟知的Spring机制似乎比做一些定制的事情更不容易,但我忍不住觉得,这种情况并不罕见,应该有更好的方法来处理它,而不是用仅用于数据绑定目的的bean乱丢类层次结构。这不是一个可怕的越轨行为,但你知道我们可以成为什么纯粹主义者
有没有其他人遇到过类似的情况并有类似的感受?如果是这样,你最后做了什么?我们在这里使用Spring3.0.x。谢谢。我已经使用Spring MVC 5年了,并且已经多次遇到这种情况。我还没有找到一个我满意的解决方案,所以我想我和你是同舟共济的 我最终的解决方案是搬到Scala。Scala使得创建这些蹩脚的小表单类的难度大大降低
class LameFormInput(@BeanProperty var pin: String = null)
我可以在一个文件中放入任意数量的类定义。我发现这是我喜欢Scala的一个令人惊讶的大原因。Scala不是一个选项,但这没关系,因为它没有解决问题的根源。不过,按照您的指导,如果我想合并这些FormBean类,我可以将它们收集为父FormBean类中的公共静态类定义,如果我有足够的资源来降低复杂性,这将是有意义的,但由于我在这个项目中只有两个,所以我就不必担心了。谢谢你花时间和我分享。我已经和这样的事情斗争多年了。我认为这归根结底是因为有时候经常?在本例中,为了充分利用框架提供的所有功能,您必须编写比您认为应该编写的更多的样板代码。我真的看不出有什么好办法。Scala通过使样板文件更容易编写更少的字符来帮助实现这一点。但这也意味着使用一种新的语言!