[英]Issue with resubmitting the form after validation
我试图通过小型应用程序学习Spring MVC,但遇到了问题。
我已经创建了一个用于用户注册的表单,现在在表单提交时,我正在使用批注进行验证。
验证失败时,我将重新显示带有错误详细信息的表单。 但是,当我重新提交表单时,我面临着如何处理URL映射的问题。
这是我的控制器代码:
@Controller
public class PersonController {
private PersonService personService;
public PersonService getPersonService() {
return personService;
}
@Autowired
public void setPersonService(PersonService personService) {
this.personService = personService;
}
@RequestMapping("/allpersons")
public String showPersonListPage(Map<String, Object> model) {
model.put("persons", getPersonService().fetchAllPersons());
return "person_list";
}
@RequestMapping(value = "/person", method = GET)
public String showNewPersonForm(Map<String, Object> model) {
model.put("person", new Person());
return "new_person";
}
@RequestMapping(value = "/person/add", method = RequestMethod.POST)
public String addPersonFromForm(@Valid Person person,
BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
return "new_person";
}
getPersonService().addPerson(person);
return "redirect:/allpersons";
}
}
最初,我尝试使用URL作为http://localhost:8080/myapp/person
显示表单。 我表单的代码如下:
new_person.jsp
<div>
<h2>New Person Form</h2>
<sf:form method="POST" modelAttribute="person"
action="person/add">
<fieldset>
<table cellspacing="0">
<tr>
<th><label for="name">Name:</label></th>
<td><sf:input path="name" id="name" /></td>
<td><sf:errors path="name" /></td>
</tr>
<tr>
<th><label for="age">Age:</label></th>
<td><sf:input path="age" id="age" /></td>
<td><sf:errors path="age" /></td>
</tr>
<tr>
<th><input type="Submit" value="Submit" /></th>
<td></td>
</tr>
</table>
</fieldset>
</sf:form>
</div>
现在在提交表单时,我表单的URL模式为person/add
因此URL更改为http://localhost:8080/myapp/person/add
。 最初,我提交的表单中包含错误的信息,因此该表单会重新加载验证错误消息。
现在,当我重新提交具有正确值的表单时,URL将转到http://localhost:8080/myapp/person/person/add
而不是http://localhost:8080/myapp/person/add
。
有人可以帮我解决这个基本问题吗?
让我知道是否需要更多详细信息。
这是我的弹簧配置文件。
仅添加文件的主要条目:
<mvc:annotation-driven validator="validator" />
<context:component-scan
base-package="com.examples" />
<bean id="validator"
class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" />
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix">
<value>/WEB-INF/views/</value>
</property>
<property name="suffix" value=".jsp" />
</bean>
PersonService
(具有@Service
批注)和Person
是简单的类
为GET
和POST
维护一个URL模式。
因此,在表单提交控制器中,处理程序应如下所示:
@RequestMapping(value = "/person", method = RequestMethod.POST)
public String addPersonFromForm(@Valid Person person,
BindingResult bindingResult) {
... // your code
}
在上面的代码中,我更改了URL模式。
现在进入您的JSP,删除action
属性以避免URL不匹配。
进行这两个更改将解决此问题。
我在任何地方都看不到“ form2”引用。 也许您遗漏了一些问题? 还是只是写错了?
另外,作为建议,我建议您使用GET和POST方法使用相同的URL,因为这是一个好习惯。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.