2017-08-13 24 views
1

私はJava Spring Frameworkの初心者です。メソッドを呼び出したり、起動時にメソッドを初期化しようとしています。アプリケーションが起動すると、私のJSPページのデータベース。私は@ EventListener、@ PostConstructを試してみましたが、何も私のために働いていません。Java Springの初期化、起動時のメソッドの呼び出し

は、これは私のWebConfiguraクラスです

@Configuration 
@ComponentScan("com.store.spring") 
@EnableWebMvc 
public class WebConfiguration extends WebMvcConfigurerAdapter { 

@Bean 
public DataSource dataSource() { 
    final JndiDataSourceLookup lookup = new JndiDataSourceLookup(); 
    lookup.setResourceRef(true); 
    DataSource dataSource = lookup.getDataSource("jdbc/product_db"); 

    return dataSource; 
} 

@Bean 
public UrlBasedViewResolver resolver() { 
    UrlBasedViewResolver viewResolver = new UrlBasedViewResolver(); 
    viewResolver.setPrefix("/WEB-INF/views/"); 
    viewResolver.setSuffix(".jsp"); 
    viewResolver.setViewClass(JstlView.class); 

    return viewResolver; 
} 

@Override 
public void addViewControllers(ViewControllerRegistry registry) { 
    registry.addViewController("/").setViewName("index"); 
} 

@Override 
public void addResourceHandlers(ResourceHandlerRegistry registry) { 
    registry.addResourceHandler("/resource/css/**").addResourceLocations("/css/").setCachePeriod(31556926); 
} 

@Override 
public void configureDefaultServletHandling (DefaultServletHandlerConfigurer configurer) { 
    configurer.enable(); 
} 

@Override 
public void addInterceptors(InterceptorRegistry registry) { 
    registry.addInterceptor(new HeaderInterceptor()); 
} 
} 

これでWebアプリケーションの初期化子クラス

@Component 
public class WebInitializer implements WebApplicationInitializer { 

@Override 
public void onStartup(ServletContext servletContext) throws ServletException { 
    AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext(); 
    context.register(WebConfiguration.class); 
    // Add context.setCongiglocation("/WEB-INF/spring/dispatcher-config.xml"); 

    ServletRegistration.Dynamic registration = servletContext.addServlet("dispatcher", new DispatcherServlet(context)); 
    registration.addMapping("/"); 
    registration.setLoadOnStartup(1); 

    ContextLoaderListener listener = new ContextLoaderListener(context); 
    servletContext.addListener(listener); 
} 
} 

これは、これは、これは私が初期化するメソッドまたは呼び出しであるヘッダインターセプタクラス

public class HeaderInterceptor extends HandlerInterceptorAdapter { 

@Override 
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) 
     throws Exception { 
    request.setAttribute("title", "We hope you have a scary and fun filled halloween"); 
    String location = request.getParameter("locationName"); 
    if (location != null) { 
     request.setAttribute("locationName", location); 
    } 
    return true; 
} 
} 

あるコントローラクラス

@Controller 
public class ProductController { 

@Autowired 
private ProductService productService; 

@RequestMapping("/index") 
public String index(Model model) { 
    List<Product> listProduct = productService.getPrducts(); 
    model.addAttribute("listProduct", listProduct); 

    return "index"; 
} 

// Request mapping using SQL tag 
@RequestMapping("/location") 
public String addLocation(Model model) { 
    List<Product> listProduct = productService.getPrducts(); 
    model.addAttribute("listProduct", listProduct); 

    return "location"; 
} 

@RequestMapping("/entry") 
public String entry() { 
    return "Entry"; 
} 

@RequestMapping("/aboutUs") 
public String aboutUS() {return "AboutUs";} 

@RequestMapping("/deal") 
public String deal() { 
    return "Deal"; 
} 

@RequestMapping("/listProduct") 
public String listOrganizationService(Model model) { 
    List<Product> listProduct = productService.getPrducts(); 
    model.addAttribute("listProduct", listProduct); 

    return "ListOrganizations"; 
} 
} 

あります始めるとき。それとも私は自分のデータを印刷するlistProductを呼び出すためのindex.jspを使用しています。この

@RequestMapping("/index") 
public String index(Model model) { 
List<Product> listProduct = productService.getPrducts(); 
model.addAttribute("listProduct", listProduct); 

return "index"; 
} 

に少なくとも いくつかのことがあります。 index.jspは、アプリケーションの起動時に最初に呼び出されるJSPです。そして私は、私は誰かが私を助けることを願っ

<div class="main-container" style="text-align: center"> 
<c:forEach var="row" items="${listProduct}"> 
    <div class="detail"> 
     <td>ID: <c:out value="${row.id}"></c:out></td> 
     <br/> 
     <td>Name: <c:out value="${row.productName}"></c:out></td> 
     <br/> 
     <td>Quantity: <c:out value="${row.quantity}"></c:out></td> 
     <br/> 
     <td>Price: <c:out value="${row.price}"></c:out></td> 
     <br/> 
     <td><div class="few-line"><c:out value="${row.description}"></c:out></div></td> 
    </div> 
</c:forEach> 

からそれらのデータ自動印刷することがABにそれをしたいです。

たとえば、私は私のWebInitializerクラス内のコードを持っていた、と私はそれを実行すると、私はエラーメッセージ

@EventListener(ContextRefreshedEvent.class) 
public void contextRefreshedEvent(Model model) { 
    List<Product> productList = productService.getPrducts(); 
    model.addAttribute("productList", productList) 
} 

を持っによって引き起こさ:java.lang.IllegalArgumentExceptionが:引数をタイプ不一致 at sun.reflect.NativeMethodAccessorImpl.invoke0(ネイティブメソッド) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect。 DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)java.lang.reflect.Method.invoke(Method.java:498)で org.springframework.context.event.ApplicationListenerMethodAdapter.doInvoke(ApplicationListenerMethodAdapter.java:256) で。 .. 56以上 org.apache.catalina.core.StandardContext。startInternal リスナーを起動できませんでした。 org.apache.catalina.core.StandardContext.startInternalコンテキスト[] 起動が原因ルートWebApplicationContextを閉じる をorg.springframework.web.context.support.AnnotationConfigWebApplicationContext.doClose 以前のエラーのために失敗しました:起動日[日8月13日10時43分:51 EDT2017];コンテキスト階層のルート

これらは私のjarファイルのための私のプラグと依存関係

<build> 
    <plugins> 
     <plugin> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>3.6.1</version> 
      <configuration> 
       <source>1.8</source> 
       <target>1.8</target> 
      </configuration> 
     </plugin> 
     <plugin> 
      <artifactId>maven-war-plugin</artifactId> 
      <version>3.0.0</version> 
      <configuration> 
       <warSourceDirectory>WebContent</warSourceDirectory> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 
<dependencies> 
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc --> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-webmvc</artifactId> 
     <version>4.3.10.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-jdbc</artifactId> 
     <version>4.3.10.RELEASE</version> 
    </dependency> 
    <!-- https://mvnrepository.com/artifact/jstl/jstl --> 
    <dependency> 
     <groupId>jstl</groupId> 
     <artifactId>jstl</artifactId> 
     <version>1.2</version> 
    </dependency> 

    <dependency> 
     <groupId>mysql</groupId> 
     <artifactId>mysql-connector-java</artifactId> 
     <version>6.0.6</version> 
    </dependency> 
    <dependency> 
     <groupId>commons-dbcp</groupId> 
     <artifactId>commons-dbcp</artifactId> 
     <version>1.4</version> 
    </dependency> 
</dependencies> 
+2

ようこそスタックオーバーフロー!私はこのコードの95%があなたの問題に関連していないと思います。あなたの問題を示す[**最小**、完全で実証可能な例](http://stackoverflow.com/help/mcve)を作成してください。 –

+0

"何も私のために働いていません。" - これはどうなの? – duffymo

答えて

0

Javaの春ですあなたは春に注釈を付けることができ、起動

上のメソッドを呼び出し、初期化Springが構築された後にそれを呼び出させるようにする@PostConstructのBeanのメソッド。 @Autowiredというメソッドに注釈を付けて、そのBeanの構築中にSpringに呼び出させることもできます。我々は、通常、データベースからキャッシュにデータをロードするために、起動時にメソッドを呼び出すためにこれらのメソッドの1つを使用します。

関連する問題