Jak zapowiedziałem w poprzednim poście tym razem pobawimy się Sitemesh-em i atrybutami kontekstowymi w JSP, więc będzie to wpis raczej krótki. Skupimy się na rozdzieleniu szablonów (layoutu) aplikacji na 2 części. Pierwszy szblon zastosujemy do panelu administracyjnego, wyświetlać będzie listy, formularze i dane, a także umieści na każdej stronie menu administracyjne. Drugi szablon będzie wykorzystywany jedynie podczas logowania i prócz formularza nie będzie zawierał nic więcej. Oczywiście jeśli ktoś chce może śmiało dodać więcej szablonów, np. specjalna strona dla obsługi zamówień która zawiera oddzielne menu, czy też
W pierwszej części tutorialu wspomniałem iż Sitemesh służy do składania stron w całość, dzięki niemu możemy stworzyć szablon strony, do którego będziemy doklejać wyniki stron co skutecznie ułatwia tworzenie widoków. Co prawda biblioteka ta potrafi więcej (w wersji 2.x) ale z racji, że korzystamy z wersji alpha lepiej używać jedynie podstawowych funkcjonalności (przynajmniej w tej chwili).
Rozdzielamy szablony
Sitemesh-a skonfigurowaliśmy w pierwszej części tuorialu, miał on za zadanie składać główny szablon (default.jsp) z widokami wyników wygenerowanymi przez aplikację, teraz zajmiemy się rozdzieleniem szablonów dla widoku logowania oraz dla pozostałej części aplikacji. Jak wiadomo, konfigurację Sitemesh-a trzymamy w klasie com.darekzon.bookstore.filter.Sitemesh, i aktualnie zawiera wpis mówiący, że każdy wyniki ma być „wklejony” do szablony default.jsp. Aby utworzyć dodatkowy szablon wystarczy dopisać regułę która dla żądania /login.html będzie stosować inny szablon. Całość wygląda następująco:
package com.darekzon.bookstore.filter;
import org.sitemesh.builder.SiteMeshFilterBuilder;
import org.sitemesh.config.ConfigurableSiteMeshFilter;
public class Sitemesh extends ConfigurableSiteMeshFilter {
protected void applyCustomConfiguration(SiteMeshFilterBuilder builder) {
builder.addDecoratorPath("/login.html", "/views/layout/login.jsp");
builder.addDecoratorPath("/*", "/views/layout/default.jsp");
}
}
W powyższym zapisie ważna jest kolejność wpisów (odwrotny zapis przysłaniałby nam szablon login.jsp dla wywołania strony logowania.
Teraz wystarczy stworzyć odpowiedni plik (np. bazując na wcześniejszym szablonie) i gotowe, zapytanie o stronę /login.html otrzyma własną stronę wynikową.
Tworzymy menu administracyjne
Teraz zajmiemy się tworzeniem menu, czynność z pozoru prosta, wystarczy wpisać kilka tagów i gotowe, jak jednak sprawić by nasze menu rozpoznawało gdzie aktualnie się znajdujemy i na bazie tego zaznaczało w menu naszą pozycję? W poprzednim projekcie używałem Sitemesh 2.x który w łatwy sposób odczytywał metatagi stron dzięki czemu łatwo można było określić naszą pozycję, niestety w wersji 3 nie działa to jak trzeba, a na pewno nie jest to w żaden sposób udokumentowane, więc trzeba sobie poradzić w inny sposób. Rozwiązaniem jakie wymyśliłem, jest ustawianie atrybutów strony w zależności od tego gdzie jesteśmy. Jak to działa?
Jak wszyscy wiemy, każda akcja posiada własny plik za pomącą którego generowany jest widok, w każdym z tych plików wstawiamy zapis:
<% pageContext.setAttribute("moduleName","content", PageContext.REQUEST_SCOPE); pageContext.setAttribute("pageName","index", PageContext.REQUEST_SCOPE); %>
Powyższy kod, ustawił nam w pliku widoku 2 atrybuty, moduleName która oznaczać będzie w jakiej grupie znajduje się strona oraz pageName która oznacza jaka strona jest generowana, PageContext.REQUEST_SCOPE mówi aplikacji, że atrybuty będą widoczne tylko w zakresie aktualnego żądania (więcej nam nie trzeba).
Zabieramy się za tworzenie menu, ponieważ menu. Możemy je stworzyć w pliku szablonu albo w oddzielnym pliku który dołączymy do naszego szablonu, ponieważ nie lubię chaosu, wybieram rozwiązanie drugie.
Tworzymy plik navigation.jsp (w folderze includes) oraz dołączamy go do naszego szablonu default.jsp dyrektywą:
<%@ include file="../includes/navigation.jsp" %>
Dołączony plik ma za zadanie odczytać atrybuty ustawione w widokach (patrz wyżej) oraz oznaczenie grupy i podstron klasą active gdy są one aktywne, dzięki czemu będziemy mogli za pomącą CSS-a odpowiednio pokazywać i ukrywać nasze menu. Nasze menu zbudowane będzie z zagnieżdżonych list nieuporządkowanych według struktury:
<ul> <li>GRUPA <ul> <li>PODSTRONA</li> </ul> </li> </ul>
Plik ten prezentuje się następująco:
<%@ taglib prefix="tag" uri="http://www.springframework.org/tags" %>
<% String moduleName = (String) pageContext.getAttribute("moduleName",PageContext.REQUEST_SCOPE); String pageName = (String) pageContext.getAttribute("pageName",PageContext.REQUEST_SCOPE); %>
<ul>
<li class="<% if(moduleName==">">
<a href="<%= request.getContextPath() %>/content.html">
</a></li>
<li class="<% if(moduleName==">">
<a href="<%= request.getContextPath() %>/catalog.html">
</a>
<ul>
<li class="<% if(moduleName==">">
<a href="<%= request.getContextPath() %>/catalog/categories.html">
</a></li>
<li>
<a href="<%= request.getContextPath() %>/catalog/books.html">
</a></li>
</ul>
</li>
<li class="<% if(moduleName==">">
<a href="<%= request.getContextPath() %>/orders.html">
</a></li>
<li class="<% if(moduleName==">">
<a href="<%= request.getContextPath() %>/clients.html">
</a></li>
<li>
<a href="<%= request.getContextPath() %>/settings.html">
</a>
<ul>
<li>
<a href="<%= request.getContextPath() %>/settings/administrators.html">
</a></li>
</ul>
</li>
<li class="logout">
<a href="<%= request.getContextPath() %>/wyloguj.html">
</a></li>
</ul>
Plik dołącza bibliotekę tagów wykorzystywaną do obsługi wiadomości, oraz odczytuje wcześniej ustawione atrybuty zapisując je do zmiennych. W kolejnych pozycjach menu następuje sprawdzenie aktualnej pozycji.
Gdy moduleName jest równe wymaganej wartości zostaje ustawiona klasa active, to samo tyczy się zmiennej pageName. Dzięki takiemu rozwiązaniu mamy nasze „dynamiczne” menu.
Jeśli ktoś zna lepsze rozwiązanie z chęcią je poznam.
PS. Jeśli chodzi o zapis request.getContextPath() to zwraca nam on ścieżkę wywołania aplikacji, tzn. jeśli nasza aplikacja działała by w folderze bookstore a jej uruchomienie wiązałoby się z wpisanie adresu http://example.com/bookstore/ to getContextPath() zwróci nam ciąg /bookstore, dzięki czemu wszystkie linki będą poprawnie obsłużone bez względu na to, czy nasza aplikacja jest uruchomiona na własnej domenie, czy też działa „w folderze”.
Jak pobrać projekt
Projekt został umieszczony na serwerach GitHub.com. Adres bezpośredni do projektu: https://github.com/darek/bookstore.
Dodatkowo zostało uruchomione repozytorium GIT dla wszystkich chętnych i dostępny jest pod adresem: git://github.com/darek/bookstore.git
Wrzesień 17, 2010 at 17:23
Wygląda na to, że nie będzie kolejnych części… szkoda :(
Wrzesień 17, 2010 at 17:29
Pocieszę Cię, właśnie kończę pisać kolejną (może w weekend się uporam), będzie zawierać integrację z Lucene oraz Envers.
Styczeń 5, 2011 at 07:41
Ja mam kilka pytań:
1) Czy są gdzieś udostępnione skrypty tworzące BD?
2) Nie używałem nigdy maven2 – i tak z ciekawości chciałem się zapytać, jak robicie build i osadzacie aplikację na serwerze aplikacyjnym?
Styczeń 5, 2011 at 09:29
1. Nie, aplikacja sama tworzy bazę danych (przy pierwszym uruchomieniu), zrzut bazy postaram się dostarczyć wkrótce
2. Build robi eclipse + maven (niestety z racji braku serwera CI), liczę, że wkrótce się to zmieni i wszelkie buildy będzie robił Hudson bądź TeamCity
Styczeń 8, 2011 at 02:08
Witam,
A jak ma wyglądać końcowy war osadzany na serwerze?
Czy dla kazdego modułu tworzysz oddzielnego war-a?
Dla bookstore
[INFO] Exploding webapp…
[INFO] Assembling webapp bookstore in E:\Firma\ABC\bookstore\target\bookstore-0.0.2
[INFO] Copy webapp webResources to E:\Firma\ABC\bookstore\target\bookstore-0.0.2
[INFO] Generating war E:\Firma\ABC\bookstore\target\bookstore-0.0.2.war
[INFO] Building war: E:\Firma\ABC\bookstore\target\bookstore-0.0.2.war
[INFO]
[INFO] — maven-install-plugin:2.3.1:install (default-install) @ bookstore —
[INFO] Installing E:\Firma\ABC\bookstore\target\bookstore-0.0.2.war to C:\Documents and Settings\Właściciel\.m2\repository\com\darekzon\bookstore.0.2\bookstore-0.0.2.war
[INFO] Installing E:\Firma\ABC\bookstore\pom.xml to C:\XZY\.m2\repository\com\darekzon\bookstore.0.2\bookstore-0.0.2.pom
[INFO] ————————————————————————
[INFO] BUILD SUCCESS
[INFO] ————————————————————————
[INFO] Total time: 8.625s
[INFO] Finished at: Sat Jan 08 01:45:28 CET 2011
[INFO] Final Memory: 5M/15M
[INFO] ————————————————————————
Dla bookstore-admin
[INFO]
[INFO] — maven-war-plugin:2.0.2:war (default-war) @ bookstore —
[INFO] Exploding webapp…
[INFO] Assembling webapp bookstore in E:\Firma\ABC\bookstore-admin\target.0.2
[INFO] Copy webapp webResources to E:\Firma\ABC\bookstore-admin\target.0.2
[INFO] Generating war E:\Firma\ABC\bookstore-admin\target.0.2.war
[INFO] Building war: E:\Firma\ABC\bookstore-admin\target.0.2.war
[INFO]
[INFO] — maven-install-plugin:2.3.1:install (default-install) @ bookstore —
[INFO] Installing E:\Firma\ABC\bookstore-admin\target.0.2.war to C:\Documents and Settings\Właściciel\.m2\repository\com\darekzon\bookstore.0.2\bookstore-0.0.2.war
[INFO] Installing E:\Firma\Projekty\eclipse_wloczykij\bookstore-admin\pom.xml to C:\XZY\.m2\repository\com\darekzon\bookstore.0.2\bookstore-0.0.2.pom
[INFO] ————————————————————————
[INFO] BUILD SUCCESS
[INFO] ————————————————————————
[INFO] Total time: 30.172s
[INFO] Finished at: Sat Jan 08 01:58:44 CET 2011
[INFO] Final Memory: 4M/15M
[INFO] ————————————————————————
Dla bookstore-lib
[INFO] — maven-install-plugin:2.3.1:install (default-install) @ bookstore-lib —
[INFO] Installing E:\Firma\ABC\bookstore-lib\target\bookstore-lib-0.0.1-SNAPSHOT.jar to C:\XYZ\.m2\repository\bookstore-lib\bookstore-lib.0.1-SNAPSHOT\bookstore-lib-0.0.1-SNAPSHOT.jar
[INFO] Installing E:\Firma\ABC\bookstore-lib\pom.xml to C:\XYZ\.m2\repository\bookstore-lib\bookstore-lib.0.1-SNAPSHOT\bookstore-lib-0.0.1-SNAPSHOT.pom
[INFO] ————————————————————————
[INFO] BUILD SUCCESS
[INFO] ————————————————————————
[INFO] Total time: 4.015s
[INFO] Finished at: Sat Jan 08 02:04:06 CET 2011
[INFO] Final Memory: 4M/15M
[INFO] ————————————————————————
Kiedy chcę osadzić aplikację na tomcat wówczas pojawia się mi informacja: „FAIL – Application at context path /bookstore-0.0.2 could not be started”
Udzielicie jakiejś podpowiedzi?
Czy możesz zamieścić gdzieś swojego wara po to bym mógł zobaczyć jak ma finalnie wyglądać?
Pozdrawiam
Styczeń 8, 2011 at 02:23
Spojrzałem teraz na konsolę Tomcat a tam…
usage: java org.apache.catalina.startup.Catalina [ -config {pathname} ] [ -nonam
ing ] { -help | start | stop }
2011-01-08 02:14:45 org.apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Native library which allows optimal performanc
e in production environments was not found on the java.library.path: C:\Program
Files\Java\jdk1.6.0_23\bin;.;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WIND
OWS;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\Jav
a\jdk1.6.0_23\bin;E:\Firma\Programy\apache-maven-2.2.1\bin
2011-01-08 02:14:46 org.apache.coyote.http11.Http11Protocol init
INFO: Initializing Coyote HTTP/1.1 on http-8080
2011-01-08 02:14:46 org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 2057 ms
2011-01-08 02:14:46 org.apache.catalina.core.StandardService start
INFO: Starting service Catalina
2011-01-08 02:14:46 org.apache.catalina.core.StandardEngine start
INFO: Starting Servlet Engine: Apache Tomcat/6.0.29
2011-01-08 02:14:46 org.apache.catalina.startup.HostConfig deployDescriptor
INFO: Deploying configuration descriptor host-manager.xml
2011-01-08 02:14:50 org.apache.catalina.startup.HostConfig deployDescriptor
INFO: Deploying configuration descriptor manager.xml
2011-01-08 02:14:50 org.apache.catalina.startup.HostConfig deployWAR
INFO: Deploying web application archive bookstore-0.0.2.war
2011-01-08 02:14:51 org.apache.catalina.loader.WebappClassLoader validateJarFile
INFO: validateJarFile(E:\Firma\Programy\apache-tomcat-6.0.29\webapps\bookstore-0
.0.2\WEB-INF\lib\servlet-api-2.5.jar) – jar not loaded. See Servlet Spec 2.3, se
ction 9.7.2. Offending class: javax/servlet/Servlet.class
log4j:WARN No appenders could be found for logger (org.springframework.web.conte
xt.ContextLoader).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN Continuable parsing error 18 and column 23
log4j:WARN The content of element type „log4j:configuration” must match „(render
er*,appender*,(category|logger)*,root?,categoryFactory?)”.
2011-01-08 02:15:02 org.apache.catalina.core.StandardContext start
SEVERE: Error listenerStart
2011-01-08 02:15:02 org.apache.catalina.core.StandardContext start
SEVERE: Context [/bookstore-0.0.2] startup failed due to previous errors
2011-01-08 02:15:02 org.apache.catalina.loader.WebappClassLoader clearReferences
Jdbc
SEVERE: The web application [/bookstore-0.0.2] registered the JBDC driver [org.p
ostgresql.Driver] but failed to unregister it when the web application was stopp
ed. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.
2011-01-08 02:15:03 org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory docs
2011-01-08 02:15:03 org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory examples
2011-01-08 02:15:04 org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory ROOT
2011-01-08 02:15:04 org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory WebContent
2011-01-08 02:15:04 org.apache.coyote.http11.Http11Protocol start
INFO: Starting Coyote HTTP/1.1 on http-8080
2011-01-08 02:15:04 org.apache.jk.common.ChannelSocket init
INFO: JK: ajp13 listening on /0.0.0.0:8009
2011-01-08 02:15:04 org.apache.jk.server.JkMain start
INFO: Jk running ID=0 time=0/78 config=null
2011-01-08 02:15:04 org.apache.catalina.startup.Catalina start
INFO: Server startup in 18319 ms
2011-01-08 02:16:39 org.apache.catalina.loader.WebappClassLoader validateJarFile
INFO: validateJarFile(E:\Firma\Programy\apache-tomcat-6.0.29\webapps\bookstore-0
.0.2\WEB-INF\lib\servlet-api-2.5.jar) – jar not loaded. See Servlet Spec 2.3, se
ction 9.7.2. Offending class: javax/servlet/Servlet.class
log4j:WARN No appenders could be found for logger (org.springframework.web.conte
xt.ContextLoader).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN Continuable parsing error 18 and column 23
log4j:WARN The content of element type „log4j:configuration” must match „(render
er*,appender*,(category|logger)*,root?,categoryFactory?)”.
2011-01-08 02:16:46 org.apache.catalina.core.StandardContext start
SEVERE: Error listenerStart
2011-01-08 02:16:46 org.apache.catalina.core.StandardContext start
SEVERE: Context [/bookstore-0.0.2] startup failed due to previous errors
2011-01-08 02:16:46 org.apache.catalina.loader.WebappClassLoader clearReferences
Jdbc
SEVERE: The web application [/bookstore-0.0.2] registered the JBDC driver [org.p
ostgresql.Driver] but failed to unregister it when the web application was stopp
ed. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.Ehh spojżałem teraz na konsolę Tomcat a tam…
Styczeń 23, 2011 at 13:55
Witam
Po zbudowaniu Admina za pomocą maven we wszystkich klasach kontrolerów znajdujących się w „com\darekzon\bookstore\admin\controller” mam błąd jak poniżej:
”
com\darekzon\bookstore\adm
in\controller\AdministratorController.class]: Instantiation of bean failed; nest
ed exception is org.springframework.beans.BeanInstantiationException: Could not
instantiate bean class [com.darekzon.bookstore.admin.controller.AdministratorCon
troller]: Constructor threw exception; nested exception is java.lang.Error: Unre
solved compilation problems:
The import org.springframework.web cannot be resolved
The import org.springframework.web cannot be resolved
The import org.springframework.web cannot be resolved
RequestMapping cannot be resolved to a type
The attribute value is undefined for the annotation type RequestMapping
ModelAndView cannot be resolved to a type
ModelAndView cannot be resolved to a type
ModelAndView cannot be resolved to a type
RequestMapping cannot be resolved to a type
The attribute value is undefined for the annotation type RequestMapping
The attribute method is undefined for the annotation type RequestMapping
RequestMethod cannot be resolved to a variable
ModelAndView cannot be resolved to a type
ModelAndView cannot be resolved to a type
ModelAndView cannot be resolved to a type
RequestMapping cannot be resolved to a type
The attribute value is undefined for the annotation type RequestMapping
The attribute method is undefined for the annotation type RequestMapping
RequestMethod cannot be resolved to a variable
ModelAndView cannot be resolved to a type
ModelAndView cannot be resolved to a type
ModelAndView cannot be resolved to a type
at org.springframework.beans.factory.support.AbstractAutowireCapableBean
Factory.instantiateBean(AbstractAutowireCapableBeanFactory.java:955)
at org.springframework.beans.factory.support.AbstractAutowireCapableBean
Factory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:901)
at org.springframework.beans.factory.support.AbstractAutowireCapableBean
Factory.doCreateBean(AbstractAutowireCapableBeanFactory.java:485)
at org.springframework.beans.factory.support.AbstractAutowireCapableBean
Factory.createBean(AbstractAutowireCapableBeanFactory.java:456)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getOb
ject(AbstractBeanFactory.java:291)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistr
y.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBe
an(AbstractBeanFactory.java:288)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean
(AbstractBeanFactory.java:190)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.
preInstantiateSingletons(DefaultListableBeanFactory.java:563)
at org.springframework.context.support.AbstractApplicationContext.finish
BeanFactoryInitialization(AbstractApplicationContext.java:872)
at org.springframework.context.support.AbstractApplicationContext.refres
h(AbstractApplicationContext.java:423)
at org.springframework.web.context.ContextLoader.createWebApplicationCon
text(ContextLoader.java:276)
at org.springframework.web.context.ContextLoader.initWebApplicationConte
xt(ContextLoader.java:197)
at org.springframework.web.context.ContextLoaderListener.contextInitiali
zed(ContextLoaderListener.java:47)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContex
t.java:3934)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4
429)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase
.java:791)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:77
1)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:526)
at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:850)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:518
)
at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1288)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.j
ava:297)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultM
BeanServerInterceptor.java:836)
at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:761
)
at org.apache.catalina.manager.ManagerServlet.check(ManagerServlet.java:
1473)
at org.apache.catalina.manager.HTMLManagerServlet.doPost(HTMLManagerServ
let.java:250)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl
icationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF
ilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperV
alve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextV
alve.java:191)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(Authentica
torBase.java:525)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.j
ava:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.j
ava:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineVal
ve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.jav
a:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java
:849)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.proce
ss(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:45
4)
at java.lang.Thread.run(Thread.java:662)
Caused by: org.springframework.beans.BeanInstantiationException: Could not insta
ntiate bean class [com.darekzon.bookstore.admin.controller.AdministratorControll
er]: Constructor threw exception; nested exception is java.lang.Error: Unresolve
d compilation problems:
The import org.springframework.web cannot be resolved
The import org.springframework.web cannot be resolved
The import org.springframework.web cannot be resolved
RequestMapping cannot be resolved to a type
The attribute value is undefined for the annotation type RequestMapping
ModelAndView cannot be resolved to a type
ModelAndView cannot be resolved to a type
ModelAndView cannot be resolved to a type
RequestMapping cannot be resolved to a type
The attribute value is undefined for the annotation type RequestMapping
The attribute method is undefined for the annotation type RequestMapping
RequestMethod cannot be resolved to a variable
ModelAndView cannot be resolved to a type
ModelAndView cannot be resolved to a type
ModelAndView cannot be resolved to a type
RequestMapping cannot be resolved to a type
The attribute value is undefined for the annotation type RequestMapping
The attribute method is undefined for the annotation type RequestMapping
RequestMethod cannot be resolved to a variable
ModelAndView cannot be resolved to a type
ModelAndView cannot be resolved to a type
ModelAndView cannot be resolved to a type
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:1
41)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy
.instantiate(SimpleInstantiationStrategy.java:72)
at org.springframework.beans.factory.support.AbstractAutowireCapableBean
Factory.instantiateBean(AbstractAutowireCapableBeanFactory.java:948)
… 45 more
Caused by: java.lang.Error: Unresolved compilation problems:
The import org.springframework.web cannot be resolved
The import org.springframework.web cannot be resolved
The import org.springframework.web cannot be resolved
RequestMapping cannot be resolved to a type
The attribute value is undefined for the annotation type RequestMapping
ModelAndView cannot be resolved to a type
ModelAndView cannot be resolved to a type
ModelAndView cannot be resolved to a type
RequestMapping cannot be resolved to a type
The attribute value is undefined for the annotation type RequestMapping
The attribute method is undefined for the annotation type RequestMapping
RequestMethod cannot be resolved to a variable
ModelAndView cannot be resolved to a type
ModelAndView cannot be resolved to a type
ModelAndView cannot be resolved to a type
RequestMapping cannot be resolved to a type
The attribute value is undefined for the annotation type RequestMapping
The attribute method is undefined for the annotation type RequestMapping
RequestMethod cannot be resolved to a variable
ModelAndView cannot be resolved to a type
ModelAndView cannot be resolved to a type
ModelAndView cannot be resolved to a type
at com.darekzon.bookstore.admin.controller.AdministratorController.(AdministratorController.java:11)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstruct
orAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingC
onstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:1
26)
… 47 more
”
Wygląda że jest coś nie tak z bibliotekami – jednak w projekcie wszystko wygląda że jest ok.
Czy może mi ktoś podpowiedzieć gdzie leży problem i jak go rozwiązać?