我有一个表格:
<form action="/processform">
<input name="firstname" value="john" />
<input name="lastname" value="doe" />
</form>
我有一个 Person 对象:
public class Person {
private String firstname;
private String lastname;
// ... getters & setters ...
}
我想接收此数据,对其执行验证,然后将其发布到数据存储区。
如何编写 Controller 来执行此操作?我知道我可以将参数作为请求参数传递,但我认为执行此操作的“正确”方法是以某种方式将数据从表单绑定(bind)到 Person 对象,然后在 Controller 中接收该 Person 对象并调用 Validate 对象被配置为接收 Person 对象。
经过大量阅读,这一步让我感到困惑。有人可以告诉我“绑定(bind)”数据、“验证”(例如 validator )和“处理”数据(例如 Controller ,特别是作为参数传递给它的内容)需要什么吗?
最佳答案
这是我一直在寻找的答案,我不明白 Spring 默认情况下会从表单提交中获取所有参数(例如“名字”和“姓氏”)并可以创建对象你通过调用这些参数的setter方法。
Controller :
@Controller
public class MyFormProcessor {
@RequestMapping("/formsubmit")
public String handleForm(@Valid Person person, BindingResult errors, Map<String,Object> model){
// ...handle form...
}
}
在为此请求调用 handleForm 之前,Spring 本质上是在执行以下魔术(显然以比我为这个简单示例描述的更可扩展的方式):
Person person = new Person();
person.setFirstname( request.getParameter("firstname") );
person.setLastname( request.getParameter("lastname") );
handleForm(person, anErrorsObject, new Model());
对于验证,您可以创建自己的 validator (我不会在这里提及任何内容),或者如果您在类路径中包含 Hibernate Validator,那么您可以注释 Person 类(示例下面)并且当您添加 @Valid 注释时,如我在上面的示例中描述的那样,Hibernate validator 将根据这些注释验证类并将任何错误发布到错误对象(BindingResult 对象是 Springs 的 Errors 的扩展,对于简单的示例,Errors 对象是有趣的组件)。
JSR-303 验证注释的 Person 类(与 @Valid 选项一起使用):
public class Person {
@NotNull
@Size(min=3, max=20)
private String firstname;
@NotNull
@Size(min=3, max=20)
private String lastname;
// ... getters & setters ...
}
关于java - Spring-MVC:需要最简单的表单处理、绑定(bind)和验证示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4112149/
当我使用Bundler时,是否需要在我的Gemfile中将其列为依赖项?毕竟,我的代码中有些地方需要它。例如,当我进行Bundler设置时:require"bundler/setup" 最佳答案 没有。您可以尝试,但首先您必须用鞋带将自己抬离地面。 关于ruby-我需要将Bundler本身添加到Gemfile中吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/4758609/
Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack
我注意到像bundler这样的项目在每个specfile中执行requirespec_helper我还注意到rspec使用选项--require,它允许您在引导rspec时要求一个文件。您还可以将其添加到.rspec文件中,因此只要您运行不带参数的rspec就会添加它。使用上述方法有什么缺点可以解释为什么像bundler这样的项目选择在每个规范文件中都需要spec_helper吗? 最佳答案 我不在Bundler上工作,所以我不能直接谈论他们的做法。并非所有项目都checkin.rspec文件。原因是这个文件,通常按照当前的惯例,只
它不等于主线程的binding,这个toplevel作用域是什么?此作用域与主线程中的binding有何不同?>ruby-e'putsTOPLEVEL_BINDING===binding'false 最佳答案 事实是,TOPLEVEL_BINDING始终引用Binding的预定义全局实例,而Kernel#binding创建的新实例>Binding每次封装当前执行上下文。在顶层,它们都包含相同的绑定(bind),但它们不是同一个对象,您无法使用==或===测试它们的绑定(bind)相等性。putsTOPLEVEL_BINDINGput
我实际上是在尝试使用RVM在我的OSX10.7.5上更新ruby,并在输入以下命令后:rvminstallruby我得到了以下回复:Searchingforbinaryrubies,thismighttakesometime.Checkingrequirementsforosx.Installingrequirementsforosx.Updatingsystem.......Errorrunning'requirements_osx_brew_update_systemruby-2.0.0-p247',pleaseread/Users/username/.rvm/log/138121
我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/
我正在使用Ruby2.1.1和Rails4.1.0.rc1。当执行railsc时,它被锁定了。使用Ctrl-C停止,我得到以下错误日志:~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/client/run.rb:47:in`gets':Interruptfrom~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/client/run.rb:47:in`verify_server_version'from~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.
有没有办法在这个简单的get方法中添加超时选项?我正在使用法拉第3.3。Faraday.get(url)四处寻找,我只能先发起连接后应用超时选项,然后应用超时选项。或者有什么简单的方法?这就是我现在正在做的:conn=Faraday.newresponse=conn.getdo|req|req.urlurlreq.options.timeout=2#2secondsend 最佳答案 试试这个:conn=Faraday.newdo|conn|conn.options.timeout=20endresponse=conn.get(url
我想在Ruby中创建一个用于开发目的的极其简单的Web服务器(不,不想使用现成的解决方案)。代码如下:#!/usr/bin/rubyrequire'socket'server=TCPServer.new('127.0.0.1',8080)whileconnection=server.acceptheaders=[]length=0whileline=connection.getsheaders想法是从命令行运行这个脚本,提供另一个脚本,它将在其标准输入上获取请求,并在其标准输出上返回完整的响应。到目前为止一切顺利,但事实证明这真的很脆弱,因为它在第二个请求上中断并出现错误:/usr/b
我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www