Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当我的模型可以用简单类型而不是自定义bean表示时,有没有合理的方法来利用Spring绑定?_Spring_Forms_Binding_Spring Mvc_Simpletype - Fatal编程技术网

当我的模型可以用简单类型而不是自定义bean表示时,有没有合理的方法来利用Spring绑定?

当我的模型可以用简单类型而不是自定义bean表示时,有没有合理的方法来利用Spring绑定?,spring,forms,binding,spring-mvc,simpletype,Spring,Forms,Binding,Spring Mvc,Simpletype,当您的模型复杂到足以保证自定义域对象时,Spring绑定可以很好地工作,但有时应用程序只需要从用户那里接收一段简单的数据,而用户并不真正保证域对象。然而,似乎没有任何办法来处理这个案件 例如,我们有一个表单,提示用户输入激活码,仅此而已。这可以很容易地用字符串表示。在另一个页面上,我们要求用户接受协议,并通过选中复选框表示接受,然后提交表单。这很容易用布尔值表示 不幸的是,我还没有找到任何方法来绑定这些简单类型,并且仍然保留Spring为表带来的附加值。在本例中,我特别希望使用它的验证,并通过标

当您的模型复杂到足以保证自定义域对象时,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通过使样板文件更容易编写更少的字符来帮助实现这一点。但这也意味着使用一种新的语言!