Suggest a feature
×

Welcome to TagMyCode

Please login or create account to add a snippet.
0
0
 
0
Language: Text
Posted by: ture ture
Added: Apr 7, 2018 9:57 PM
Views: 21
Tags: no tags
  1. package com.websystique.springmvc.configuration;
  2.  
  3. import org.springframework.context.MessageSource;
  4. import org.springframework.context.annotation.Bean;
  5. import org.springframework.context.annotation.ComponentScan;
  6. import org.springframework.context.annotation.Configuration;
  7. import org.springframework.context.support.ResourceBundleMessageSource;
  8. import org.springframework.web.servlet.ViewResolver;
  9. import org.springframework.web.servlet.config.annotation.EnableWebMvc;
  10. import org.springframework.web.servlet.view.InternalResourceViewResolver;
  11. import org.springframework.web.servlet.view.JstlView;
  12.  
  13. @Configuration
  14. @EnableWebMvc
  15. @ComponentScan(basePackages = "com.websystique.springmvc")
  16. public class AppConfig {
  17.      
  18.     @Bean
  19.     public ViewResolver viewResolver() {
  20.         InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
  21.         viewResolver.setViewClass(JstlView.class);
  22.         viewResolver.setPrefix("/WEB-INF/views/");
  23.         viewResolver.setSuffix(".jsp");
  24.         return viewResolver;
  25.     }
  26.      
  27.     @Bean
  28.     public MessageSource messageSource() {
  29.         ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
  30.         messageSource.setBasename("messages");
  31.         return messageSource;
  32.     }
  33. }
  34.  
  35.  
  36.  
  37. Ancora una volta, @Configurationsegna questa classe come classe di configurazione come menzionato sopra e fa riferimento ComponentScanalle posizioni dei pacchetti per trovare i bean associati.
  38. @EnableWebMvcè equivalente a mvc:annotation-drivenin XML.
  39. Il metodo viewResolverconfigura un resolver di visualizzazione per identificare la vista reale.
  40.  
  41. In questo post, stiamo lavorando con l'invio dei moduli, convalidando l'input dell'utente (tramite annotazioni JSR303). In caso di errore di convalida, vengono visualizzati i messaggi di errore predefiniti. Per ignorare tali impostazioni predefinite dai propri messaggi personalizzati [internazionalizzati] da un pacchetto di messaggi esterno [file .properties], è necessario configurare a ResourceBundleMessageSource. Il metodo messageSourceè lì per lo stesso scopo. Notare il parametro fornito (messaggi) al metodo basename. Spring cercherà un file denominato messages.properties nel percorso della classe dell'applicazione. Aggiungiamo il file:
  42.  
  43. /src/main/resources/messages.properties
  44.  
  45.  
  46. Size.employee.name=Name must be between {2} and {1} characters long
  47. NotNull.employee.joiningDate=Joining Date can not be blank
  48. NotNull.employee.salary=Salary can not be blank
  49. Digits.employee.salary=Only numeric data with max 8 digits and with max 2 precision is allowed
  50. NotEmpty.employee.ssn=SSN can not be blank
  51. typeMismatch=Invalid format
  52. non.unique.ssn=SSN {0} already exist. Please fill in different value.
  53.  
  54.  
  55.  
  56. Si noti che il messaggio precedente segue un modello specifico
  57.  
  58. {ValidationAnnotationClass}.{modelObject}.{fieldName}
  59. Inoltre, sulla base di annotazioni specifiche (es. @Size) puoi anche passare gli argomenti a questi messaggi usando gli indici {0}, {1}, .. {i}.
  60.  
  61.  
  62. Adesso bisogna configurare la seguente classe :
  63.  
  64. package com.websystique.springmvc.configuration;
  65.  
  66. import javax.servlet.ServletContext;
  67. import javax.servlet.ServletException;
  68. import javax.servlet.ServletRegistration;
  69.  
  70. import org.springframework.web.WebApplicationInitializer;
  71. import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
  72. import org.springframework.web.servlet.DispatcherServlet;
  73.  
  74. public class AppInitializer implements WebApplicationInitializer {
  75.  
  76.     public void onStartup(ServletContext container) throws ServletException {
  77.  
  78.         AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
  79.         ctx.register(AppConfig.class);
  80.         ctx.setServletContext(container);
  81.  
  82.         ServletRegistration.Dynamic servlet = container.addServlet(
  83.                 "dispatcher", new DispatcherServlet(ctx));
  84.  
  85.         servlet.setLoadOnStartup(1);
  86.         servlet.addMapping("/");
  87.     }
  88.  
  89. }
  90.  
  91.  
  92. Il contenuto sopra è simile al contenuto di web.xml poiché stiamo utilizzando il front controller DispatherServler, assegnando il mapping (url-pattern in xml) e invece di fornire il percorso per il file di configurazione spring (spring-servlet.xml), eccoci registrazione della classe di configurazione.
  93.  
  94. AGGIORNAMENTO: nota che la classe sopra può essere scritta anche più concisamente [ ed è il modo preferito ], estendendo la AbstractAnnotationConfigDispatcherServletInitializerclasse base, come mostrato di seguito:
  95.  
  96. package com.websystique.springmvc.configuration;
  97.  
  98. import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
  99.  
  100. public class AppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
  101.  
  102.     @Override
  103.     protected Class<?>[] getRootConfigClasses() {
  104.         return new Class[] { AppConfig.class };
  105.     }
  106.  
  107.     @Override
  108.     protected Class<?>[] getServletConfigClasses() {
  109.         return null;
  110.     }
  111.  
  112.     @Override
  113.     protected String[] getServletMappings() {
  114.         return new String[] { "/" };
  115.     }
  116.  
  117. }
  118.  
  119.  
  120.  
  121.  
  122.  
  123.  
  124.  
  125.