Je suis nouveau dans le domaine de Spring MVC, mais pas dans celui du développement web en Java. J'essaie de créer un exemple simple de formulaire->contrôleur.
J'ai un formulaire, un contrôleur de formulaire (configuré dans un contexte XML collé ci-dessous) et mon modèle (un simple bean). Lorsque je soumets le formulaire, la valeur de mon entrée de texte est toujours nulle, peu importe. Avez-vous une idée ?
Configuration du ressort du contrôleur de forme :
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- controllers -->
<bean name="/home.html" class="atc.web.view.controller.HomeController" />
<!--bean name="/mirror.html" class="atc.web.view.controller.MirrorController" -->
<bean name="/url-cache.html" class="atc.web.view.controller.URLCacheFormController">
<property name="synchronizeOnSession" value="true" />
<!--property name="sessionForm" value="false"-->
<property name="commandName" value="urlForm"/>
<property name="commandClass" value="atc.web.view.model.URLBean"/>
<property name="validator">
<bean class="atc.web.view.validators.URLValidator"/>
</property>
<property name="formView" value="mirror"/>
<property name="successView" value="url-cache.html"/>
<property name="URLCachingService" ref="urlCachingService" />
</bean>
<!-- end controllers -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
<!-- custom beans -->
<bean id="breakcrumbInjectionFilter" class="atc.web.view.filter.BreadcrumbInjectionFilter">
<property name="contextPrefix" value="/home-web" />
</bean>
<!-- end custom beans -->
</beans>
La JSP qui contient mon formulaire est la suivante :
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ include file="/WEB-INF/jspf/core/taglibs.jspf" %>
<html>
<head><title>Simple tools</title></head>
<style>
.error s {
color:#FF0000;
}
</style>
<body>
<%@ include file="/WEB-INF/jspf/nav/nav.jspf" %>
Errors: <form:errors path="url" cssClass="error"/>
<form:form method="post" commandName="urlForm">
<form:input path="url" />
<input type="submit" align="center" value="Execute" />
</form:form>
</body>
</html>
Voici la source complète de mon contrôleur :
public class URLCacheFormController extends SimpleFormController {
private URLCachingService cachingService;
private static Logger log = Logger.getLogger(URLCacheFormController.class);
public ModelAndView onSubmit(Object command) throws ServletException {
log.debug(String.format("URLCachingFormController received request with object '%s'", command));
URLBean urlBean = (URLBean) command;
try {
URL url = new URL(urlBean.getUrl());
URLCache cache = cachingService.cacheURL(url);
cache.cacheToTempFile();
} catch (IOException e) {
log.error("Invalid URL...", e);
}
return new ModelAndView(new RedirectView(getSuccessView()));
}
protected Object formBackingObject(HttpServletRequest request) throws ServletException {
log.debug("formBackingObject() ");
return new URLBean();
}
public void setURLCachingService(URLCachingService cachingService) {
this.cachingService = cachingService;
}
}
Tout ce qui précède produit le HTML suivant :
<html>
<head></head>
<body>
<div><span><a href="home.html">Home </a></span><span> | <a href="url-cache.html">Page Mirror</a></span></div>
<div id="breadcrumb"><span>Your trail:<a href=""/></span></div>Attrs:<div/>
<form id="urlForm" method="post" action="/home-web/url-cache.html">
<input id="url" type="text" value="" name="url"/>
<input type="submit" align="center" value="Execute"/>
</form>
</body>
</html>
Je remplace maintenant doSubmitAction(Object command)
mais je ne trouve toujours pas la méthode. Le formulaire est soumis, mais l'instant d'après, je me retrouve avec un formulaire vierge (après formBackingObject(HttpServletRequest request)
est appelé).
C'est-à-dire que lorsque je soumets, l'appel de journalisation sur la ligne 1 de Le validateur s'exécute et échoue (il ajoute correctement les messages d'erreur) parce que la valeur qu'il vérifie est toujours nulle. (ou, plus exactement, elle n'est jamais fixée). . L'appel à doSubmitAction
dans le contrôleur de formulaire n'est jamais exécuté.formBackingObject
se produit cependant toujours. L'attribut request de mon formulaire (l'entrée 'url' du formulaire) est toujours nul.
Mise à jour : OK, donc après un débogage sérieux comme suggéré par serg555, et la suppression de la validation, je peux confirmer que le problème semble être avec le mappage des paramètres de la demande - comme la valeur de "url" du formulaire - à ma commande/bean ; c'est-à-dire que l'URL n'est jamais défini sur mon bean, ou le bean est recréé.
Veuillez m'aider.