Problema con Spring e Ajax

di il
9 risposte

Problema con Spring e Ajax

Ciao!

ho alcuni problemi con Ajax e spring.

dalla home page dovrei inviare dei dati tramite ajax.
questa la funzione jquery:

            submitHandler: function (form) {
                $(form).ajaxSubmit({
                    type: "POST",
                    data: $(form).serialize(),
                    url: "send.html",
                    success: function (res) {
                        $('#contact :input').attr('disabled', 'disabled');
                        $('#contact').fadeTo("slow", 0.15, function () {
                            $(this).find(':input').attr('disabled', 'disabled');
                            $(this).find('label').css('cursor', 'default');
                            $('#success').fadeIn();
                        });
                        alert(res);
                    },
                    error: function (err) {
                        $('#contact').fadeTo("slow", 0.15, function () {
                            $('#error').fadeIn();
                        });
                        console.log(err);
                    }
                });
            }
questo il controller:

@Controller
public class AjaxController {

    @ResponseBody
    @RequestMapping(value = "/send", method = RequestMethod.POST)
    public String sendEmail(@RequestParam(value = "nameFrom") String nameFrom, @RequestParam(value = "emailFrom") String emailFrom, @RequestParam(value = "message") String message) {
        StringBuilder sb = new StringBuilder();
        sb.append(nameFrom).append(emailFrom).append(message);
        return sb.toString();
    }
}
in sostanza ricado sempre nella funzione di callback error.
pesno che il problema sia l'url, ma non so come impostarlo!

9 Risposte

  • Re: Problema con Spring e Ajax

    fermat ha scritto:


                        url: "send.html",
        @RequestMapping(value = "/send", method = RequestMethod.POST)
    Beh, innanzitutto perché chiami send.html quando il mapping è solo "send" ?
  • Re: Problema con Spring e Ajax

    Ciao andbin!

    avevo provato anche così:
    
    url: "send",
    
    ma ottengo cmq errore!
  • Re: Problema con Spring e Ajax

    fermat ha scritto:


    ma ottengo cmq errore!
    Devi comunque chiarire delle cose: innanzitutto se non sbaglio, l'url che metti nella chiamata ajax, se è relativo lo è rispetto al url della pagina in cui sei, quindi quale è la pagina?
    E poi infine nel controller in un mapping /qualcosa, il "/" dipende anche da come è mappato nel web.xml il DispatcherServlet.
    Tipicamente il DispatcherServlet lo si mappa con <url-pattern>/</url-pattern> e quindi: se il controller non ha @RequestMapping a livello di classe e il metodo ha @RequestMapping("/send") allora l'url complessivo per invocare il metodo è http://host:porta/nomecontesto/send
    E quindi devi verificare che corrisponda a quello che viene invocato lato client.

    EDIT: se non sei sicuro di cosa esce fuori come chiamata dal browser, usa i suoi "developer tools" (es. Firebug su Firefox) e vedi subito cosa invoca e come.
  • Re: Problema con Spring e Ajax

    Allora:

    1) la pagina è http://localhost:8080/mf/index.htm, che è quella a cui la pagina redirect.jsp rimanda

    2) il dispatcher-servlet è questo:
    
    <?xml version='1.0' encoding='UTF-8' ?>
    <!-- was: <?xml version="1.0" encoding="UTF-8"?> -->
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:p="http://www.springframework.org/schema/p"
           xmlns:aop="http://www.springframework.org/schema/aop"
           xmlns:tx="http://www.springframework.org/schema/tx"
           xsi:schemaLocation="
    http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop.xsd
    http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx.xsd">
    
        <bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/>
    
        <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
            <property name="mappings">
                <props>
                    <prop key="index.html">indexController</prop>
                </props>
            </property>
        </bean>
    
        <bean id="viewResolver"
              class="org.springframework.web.servlet.view.InternalResourceViewResolver"
              p:prefix="/WEB-INF/jsp/"
              p:suffix=".jsp" />
    
        <bean name="indexController"
              class="org.springframework.web.servlet.mvc.ParameterizableViewController"
              p:viewName="index" />
    </beans>
    
    3) questo invece il web.xml:
    
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
        <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/applicationContext.xml</param-value>
        </context-param>
        <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener>
        <servlet>
            <servlet-name>dispatcher</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <load-on-startup>2</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>dispatcher</servlet-name>
            <url-pattern>*.html</url-pattern>
        </servlet-mapping>
        <session-config>
            <session-timeout>
                30
            </session-timeout>
        </session-config>
        <welcome-file-list>
            <welcome-file>redirect.jsp</welcome-file>
        </welcome-file-list>
    </web-app>
    
    4) appena riesco a trovare la richiesta tra tutto questo output, vedo cosa esce fuori!
  • Re: Problema con Spring e Ajax

    fermat ha scritto:


        <servlet-mapping>
            <servlet-name>dispatcher</servlet-name>
            <url-pattern>*.html</url-pattern>
        </servlet-mapping>
    La prima questione è qui: I controller in Spring risponderanno solo a url che terminano con .html
    Se un url è in altro modo, NON arriva nemmeno al DispatcherServlet di Spring!

    La seconda questione è che il mapping lo fai con SimpleUrlHandlerMapping e non vedo nulla nella configurazione dei bean di Spring che attiva la scoperta e utilizzo dei controller tramite le annotation.
  • Re: Problema con Spring e Ajax

    Allora, ho provato a fare alcune modifiche, con il risultato che non riesco neanche più ad eseguire il deploy su glassfish.

    web.xml:
    
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
    http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
        <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/applicationContext.xml</param-value>
        </context-param>
        <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener>
        <servlet>
            <servlet-name>dispatcher</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>/WEB-INF/dispatcher-servlet.xml</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>dispatcher</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>
    </web-app>
    
    applicationContext.xml
    
    <?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">
    		
    </beans>
    
    dispatcher-servlet.xml
    
    <?xml version='1.0' encoding='UTF-8' ?>
    <!-- was: <?xml version="1.0" encoding="UTF-8"?> -->
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:p="http://www.springframework.org/schema/p"
           xmlns:aop="http://www.springframework.org/schema/aop"
           xmlns:tx="http://www.springframework.org/schema/tx"
           xsi:schemaLocation="
    http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop.xsd
    http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd
    http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc.xsd">
    
        <bean id="viewResolver"
              class="org.springframework.web.servlet.view.InternalResourceViewResolver"
              p:prefix="/WEB-INF/jsp/"
              p:suffix=".jsp" />
    	
        <context:component-scan base-package="it.package" />
        <resources mapping="/resources/**" location="/resources/" />
        <annotation-driven />
    </beans>
    
    glassfish-web.xml
    
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd">
    <glassfish-web-app error-url="">
      <context-root>/mf</context-root>
      <class-loader delegate="true"/>
      <jsp-config>
        <property name="keepgenerated" value="true">
          <description>Keep a copy of the generated servlet class' java code.</description>
        </property>
      </jsp-config>
    </glassfish-web-app>
    
    infine questo il controller che ho messo dentro al package:
    
    @Controller
    public class IndexController {
    
        @RequestMapping(value = "/index")
        public String index() {
            return "index";
        }
    
        @ResponseBody
        @RequestMapping(value = "/send", method = RequestMethod.POST)
        public String sendEmail(@RequestParam(value = "nameFrom") String nameFrom, @RequestParam(value = "emailFrom") String emailFrom, @RequestParam(value = "message") String message) {
            StringBuilder sb = new StringBuilder();
            sb.append(nameFrom).append(emailFrom).append(message);
            return sb.toString();
        }
    }
    
    EDIT: modificato il dispatcher, e l'errore è questo: Il prefisso "context" per l'elemento "context:component-scan" non è associato.
  • Re: Problema con Spring e Ajax

    fermat ha scritto:


    EDIT: modificato il dispatcher, e l'errore è questo: Il prefisso "context" per l'elemento "context:component-scan" non è associato.
    Il prefisso context (come gli altri) va dichiarato con il xmlns
  • Re: Problema con Spring e Ajax

    Si, mi ero totalmente dimenticato.
    cmq ho modificato il dispathcer-servlet.xml così:
    
    <?xml version='1.0' encoding='UTF-8' ?>
    <!-- was: <?xml version="1.0" encoding="UTF-8"?> -->
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:p="http://www.springframework.org/schema/p"
           xmlns:aop="http://www.springframework.org/schema/aop"
           xmlns:tx="http://www.springframework.org/schema/tx"
           xmlns:mvc="http://www.springframework.org/schema/mvc"
           xmlns:context="http://www.springframework.org/schema/context"
           xsi:schemaLocation="
    http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop.xsd
    http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx.xsd
    http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd">
    
        <context:component-scan base-package="com.package" />
        <mvc:annotation-driven />
        
        <bean id="viewResolver"
              class="org.springframework.web.servlet.view.InternalResourceViewResolver"
              p:prefix="/WEB-INF/jsp/"
              p:suffix=".jsp" />
    	
        <mvc:resources mapping="/resources/**" location="/resources/persona/Template/Dark_Version/" />
    </beans>
    
    e il controller così:
    
    
    @Controller
    public class IndexController {
    
        @RequestMapping(value = "/index.html")
        public String index() {
            return "index";
        }
    
        @ResponseBody
        @RequestMapping(value = "/send.html", method = RequestMethod.POST)
        public String sendEmail(@RequestParam(value = "nameFrom") String nameFrom, @RequestParam(value = "emailFrom") String emailFrom, @RequestParam(value = "message") String message) {
            StringBuilder sb = new StringBuilder();
            sb.append(nameFrom).append(emailFrom).append(message);
            return sb.toString();
        }
    }
    
    accedo alla home page, ma continuo ad avere quell'errore con ajax.
  • Re: Problema con Spring e Ajax

    Ok tutto a posto.
    i campi name del form e i parametri del controller non cambiaciavano.
    e quindi non gli arrivavano i parametri richiesti.
    adesso è tutto a posto.

    grazie mille per l'aiuto!!
Devi accedere o registrarti per scrivere nel forum
9 risposte