lunedì 24 giugno 2013

modello vista disaccoppiati

Disaccoppiamo il modello dalla vista. Nell'esempio precedente avevamo un accoppiamento perchè nel modello era cablato direttamente il percorso della pagina jsp di arrivo.
return new ModelAndView("WEB-INF/jsp/hello.jsp", "now", now);
Adottiamo un approccio semplice: settiamo un prefisso e un suffisso nel InternalResourceViewResolver. Modifichiamo e dichiariamo un ingresso viewResolver . Scegliendo  potremo usare JSTL in combinazione con un pachetto di messaggi e avremo il supporto per l'internazionalizzazione.
springapp2-servlet.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-2.0.xsd">
    <!-- the application context definition for the springapp2 DispatcherServlet -->
    <bean name="/hello.htm" class="springapp2.web.HelloController"/>
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>
        <property name="prefix" value="/WEB-INF/jsp/"></property>
        <property name="suffix" value=".jsp"></property>       
    </bean>
</beans>

Riscriviamo il controller ,HelloController.java:
package springapp2.web;
import org.springframework.web.servlet.mvc.Controller;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import java.io.IOException;
import java.util.Date;
public class HelloController implements Controller {
    protected final Log logger = LogFactory.getLog(getClass());
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String now = (new Date()).toString();
        logger.info("Returning hello view with " + now);
        return new ModelAndView("hello", "now", now);
    }
}
Adesso nel controller la vista è indicata solo come hello. il prefisso (il percorso) e il suffisso (l'estensione) sono indicati nello springapp-servlet.xml .

Nessun commento:

Posta un commento