JavaScript avec Spring MVC ne fonctionne pas
J'ai téléchargé de connexion modèle qui utilise le css et le JavaScript. Lorsque je le démarre en format html par défaut il affiche ok, mais quand j'ai mis le même code pour mon Spring MVC 3 app et changer le format de jsp, partie javascript est désactivé. Je peux accéder à des externes, js fichiers via mon navigateur web, donc je ne sais pas où peut être le problème.
C'est le bon look:
mais c'est ce que j'obtiens:
<script language="javascript" type="text/javascript" src="js/niceforms.js"></script>
<link rel="stylesheet" type="text/css" media="all" href="css/niceforms-default.css" />
J'ai seulement changé le lieu de externe css et js ressources, mais ces fichiers sont utilisables comme je l'ai dit.
C'est ma structure:
Dans mon web.xml
j'ai ces lignes:
<!-- The definition of the Root Spring Container shared by all Servlets and Filters -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/spring/root-context.xml,
/WEB-INF/spring/security-context.xml,
</param-value>
</context-param>
<!-- Creates the Spring Container shared by all Servlets and Filters -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- Processes application requests -->
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- Spring Security -->
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.css</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.js</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.gif</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.jpg</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.png</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.txt</url-pattern>
</servlet-mapping>
J'ai aussi l'utilisation d'Apache tiles2
<tiles-definitions>
<definition name="base.definition" template="/WEB-INF/views/layout/layout.jsp">
<put-attribute name="body" value="" />
</definition>
<definition name="contact" extends="base.definition">
<put-attribute name="body" value="/WEB-INF/views/contact.jsp" />
</definition>
<definition name="login" template="/WEB-INF/views/login/login.jsp">
</definition>
Grâce.
Edit:
Je sais où est le problème maintenant, mais ne sais toujours pas comment le résoudre... le Problème est dans les chemins dans les fichiers css externes. J'ai quelque chose comme ceci: body {background-image:url('images/bg.jpg');}
mais je ne trouve pas d'erreur dans firebug parce qu'il essaie de trouver la ressource dans localhost:8080/sheedo/css/images/bg.jpg et lorsque j'ai mis le chemin absolu de ressources comme body {background-image:url('/images/bg.jpg');}
je reçois la même erreur aussi, mais il essaie de le trouver dans localhost:8080/images/bg.jpg. Lorsque j'utilise ./images/bg.jpg
c'est ok, mais il n'existe aucune autre solution au lieu de réécrire tous les chemins dans les fichiers css? Je veux dire quelque chose comme <mvc:resources ... >
est-il possible ?
Merci pour l'astuce avec firebug. Regarde mon edit.
OriginalL'auteur Jan Tobola | 2012-04-26
Vous devez vous connecter pour publier un commentaire.
Utiliser le code ci-dessus.. Vous avez besoin de spécifier de façon dynamique, pas statique..
oui - c'est juste une référence à un fichier statique, ne fait aucune différence si c'est un fichier CSS ou JS.
Oui, vous pouvez nickdos est tout à fait correcte
OriginalL'auteur Raghuveer
Utiliser le chemin absolu de votre jsp pour javascript et css
ajouter ceci dans votre jsp
Modifier ces deux lignes
Ughhh, c'est tellement laid (son 2012 pas 2002), essayez de
${pageContext.request.contextPath}
à la place. E. g.<script language="javascript" type="text/javascript" src="${pageContext.request.contextPath}/js/niceforms.js"></script>
merci @nickdos....
OriginalL'auteur Ramesh Kotha
Il y a deux choses que je vois ici
<c:url/>
qui est plus propre. http://docs.oracle.com/javaee/5/jstl/1.1/docs/tlddocs/c/tld-summary.htmlOriginalL'auteur raddykrish
Au lieu de cela laid
${pageContext.request.contextPath}
, si vous utilisez dans votre modèle:Ensuite, vous pouvez faire ceci:
OriginalL'auteur djangofan