Błąd podczas walidacji danych

0

Witam, zaczynam naukę SpringMVC i podczas walidacji danych wyskakuje taki błąd:

javax.validation.ConstraintViolationException: Validation failed for classes [pl.pawel.spring.model.Contact] during persist time for groups [javax.validation.groups.Default, ]
List of constraint violations:[
	ConstraintViolationImpl{interpolatedMessage='size must be between 5 and 2147483647', propertyPath=lastname, rootBeanClass=class pl.pawel.spring.model.Contact, messageTemplate='{javax.validation.constraints.Size.message}'}
]
	org.hibernate.cfg.beanvalidation.BeanValidationEventListener.validate(BeanValidationEventListener.java:161)
	org.hibernate.cfg.beanvalidation.BeanValidationEventListener.onPreInsert(BeanValidationEventListener.java:94)
	org.hibernate.action.EntityInsertAction.preInsert(EntityInsertAction.java:178)
	org.hibernate.action.EntityInsertAction.execute(EntityInsertAction.java:72)
	org.hibernate.engine.ActionQueue.execute(ActionQueue.java:273)
	org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:265)
	org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:184)
	org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
	org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:51)
	org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1216)
	org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:383)
	org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:133)
	org.springframework.orm.hibernate3.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:656)
	org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:754)
	org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:723)
	org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:393)
	org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:120)
	org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
	org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
	$Proxy42.addContact(Unknown Source)
	pl.pawel.spring.controller.ContactController.addContact(ContactController.java:41)
	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	java.lang.reflect.Method.invoke(Method.java:601)
	org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176)
	org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:436)
	org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:424)
	org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923)
	org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)
	org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
	org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:322)
	org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:116)
	org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
	org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
	org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:103)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
	org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
	org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
	org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
	org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:150)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
	org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:182)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
	org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
	org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
	org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:184)
	org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:155)
	org.springframework.security.config.debug.DebugFilter.invokeWithWrappedRequest(DebugFilter.java:69)
	org.springframework.security.config.debug.DebugFilter.doFilter(DebugFilter.java:58)
	org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)
	org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259)

Widzę, że błąd jest w metodzie

addContact(Contact c)

ale nie wiem jak go naprawić.

Klasy zawarte w projekcie:
Model

@Entity
@Table(name = "contacts")
public class Contact implements Serializable {
	@Id
	@GeneratedValue
	private Integer id;

	private String firstname;

	@NotNull
	@Size(min = 5)
	private String lastname;

	//gettery i settery
}
@Repository
public class ContactDAOImpl implements ContactDAO {

	@Autowired
	public SessionFactory sessionFactory;

	@Override
	public void addContact(Contact contact) {
		sessionFactory.getCurrentSession().save(contact);
	}
	
	//pozostałe metody
}
@Service
public class ContactServiceImpl implements ContactService {

	@Autowired
	private ContactDAO contactDAO;

	@Transactional
	public void addContact(Contact contact) {
		contactDAO.addContact(contact);
	}
}

Kontroler

@Controller
public class ContactController {

	Logger log = LoggerFactory.getLogger(ContactController.class.getName());

	@Autowired
	private ContactService contactService;

	@RequestMapping("/")
	public String listContacts(Map<String, Object> map) {

		map.put("contact", new Contact());
		map.put("contactList", contactService.listContact());

		return "contact";
	}

	@RequestMapping(value = "/add", method = RequestMethod.POST)
	public String addContact(@Valid Contact contact, BindingResult result) {

		contactService.addContact(contact);
		return "redirect:/";
	}
}

Formularz w widoku

<form:form method="post" action="add" commandName="contact"
			modelAttribute="contact">
			<table>
				<tr>
					<td><form:label path="firstname">
							<spring:message code="label.firstname" />
						</form:label></td>
					<td><form:input path="firstname" /></td>
				</tr>
				<tr>
					<td><form:label path="lastname">
							<spring:message code="label.lastname" />
						</form:label></td>
					<td><form:input path="lastname" /></td>
					<td><form:errors path="lastname" cssClass="error" /></td>
				</tr>
				<tr>
					<td colspan="2"><input type="submit"
						value="<spring:message code="label.addcontact"/>" /></td>
				</tr>
			</table>
		</form:form>

Do konfiguracji Spring'a dodałem:

<bean class="pl.pawel.spring.service.ContactServiceImpl" id="contactService"/><bean class="pl.pawel.spring.dao.ContactDAOImpl" id="contactDAO"/>

Co robię źle?

0

Podałeś za krótkie nazwisko:

    @NotNull
    @Size(min = 5)
    private String lastname;
0

Podany przykład jest ze strony
http://viralpatel.net/blogs/spring3-mvc-hibernate-maven-tutorial-eclipse-example/
i chcę do formularza dodawania kontaktów dodać walidację danych.
Ma ktoś jakieś sugestie jak to zrobić, bo mnie już brak pomysłów na rozwiązanie tego problemu.

0

ostatnio ktoś na forum miał chyba podobny problem, bo strona zapisała mu się w html, a nie xhtml

1

Rozwiązanie mojego problemu jest następujące:

  • dodanie do konfiguracji spring'a
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
	<property name="webBindingInitializer">
		<bean class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer">
			<property name="validator" ref="validator" />
		</bean>
	</property>
</bean>

<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" />
  • oraz modyfikacja metody kontrolera addContact
@RequestMapping(value = "/add", method = RequestMethod.POST)
	public String addContact(@ModelAttribute("contact") @Valid Contact contact,
			BindingResult result, ModelMap map) {

		if (result.hasErrors()) {
			map.put("contactList", contactService.listContact());
			return "contact";
		}
		contactService.addContact(contact);
		map.put("contactList", contactService.listContact());
		return "Done";
	}

1 użytkowników online, w tym zalogowanych: 0, gości: 1