2017-02-20 3 views
0

Je développe une application web en utilisant Spring mvc. J'ai une page qui affiche tous les projets dans la base de données. Si je clique sur l'un des projets énumérés, il affichera d'autres détails supplémentaires de ce projet particulier. Ceci est fait en utilisant @PathVariable.Comment modifier une URL demandée au printemps mvc, avant de passer au contrôleur

@RequestMapping(value={"/project/{name}"}) 
public String viewProject(HttpServletRequest request,@PathVariable("name")  
String projectName, ModelMap model){ 
    ....... 
    ....... 

} 

Ci-dessus, mon code de mappage de demande. Mon URL sera http://localhost:8083/releaseDashboard/project/CSOB.html (csob est mon nom de projet et releaseDashboard est mon nom d'application). Jusqu'à ce que mon application fonctionne bien. Lorsque je clique sur le bouton d'accueil de cette page, ma requête est mappée à la méthode de contrôleur ci-dessus et mon URL devient localhost: 8083/releaseDashboard/project/home.html. Mais l'URL attendue est localhost: 8083/releaseDashboard/home.html

Quelqu'un peut-il m'aider s'il vous plaît? J'ai lu que nous pouvons utiliser Interceptor ou filtres pour changer l'URL demandée. Mais je ne pouvais voir aucun extrait de code pour cela.

UPDATE

Web.xml

<servlet> 
     <servlet-name>spring</servlet-name> 
     <servlet-class> 
      org.springframework.web.servlet.DispatcherServlet 
     </servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>spring</servlet-name> 
     <url-pattern>*.html</url-pattern> 
    </servlet-mapping> 

ressort servlet.xml

<context:component-scan base-package="com.suntec.reldashboard.controller" /> 
    <context:component-scan base-package="com.suntec.reldashboard.service" /> 
    <context:component-scan base-package="com.suntec.reldashboard.dao" /> 
    <mvc:annotation-driven/> 
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <property name="prefix" value="/WEB-INF/jsp/" /> 
     <property name="suffix" value=".jsp" /> 
    </bean> 
+0

Compris ce que vous voulez. Mais pas clair quelle est votre erreur et ce que vous avez fait. Pourquoi le lien a un '.html'? Comme c'est Spring MVC, il doit être 'http: // localhost: 8083/releaseDashboard/project/CSOB'. –

+0

web.xml est configuré comme ça. Ce n'est pas un problème ici.Si je supprime ce HTML de web.xml, mon URL sera la même que celle que vous avez mentionnée dans vos commentaires. – sreehari

+0

S'il vous plaît modifier votre question avec vos fichiers de configuration - web.xml, fichier de configuration de printemps, etc. Comment vous avez configuré le résolveur de vue? –

Répondre

-1

Votre config dans web.xml dans le contexte de Spring MVC est incorrecte. Modifiez-le en tant que <url-pattern>/</url-pattern>. Ainsi, toutes les demandes adressées à votre projet passeront par le «servlet Dispatcher».

(Vous pouvez également utiliser comme ceci <url-pattern>something-here</url-pattern>. Ensuite, votre URL de base devrait avoir un extra 'quelque chose-ici').

Maintenant, vous pouvez accéder à la ressource,

@RequestMapping(value={"/project/{name}"}) 
public String viewProject(HttpServletRequest request,@PathVariable("name")  
String projectName, ModelMap model){ 
    ....... 
    ....... 
    return "hello"; 
} 

par l'URL http://localhost:8083/releaseDashboard/project/CSOB. Alors projectName sera CSOB. Vous devez avoir un fichier 'jsp' sous /WEB-INF/jsp/ sous le nom hello.jsp. Dans ce fichier jsp, vous pouvez accéder aux valeurs model. Vous ne devez pas utiliser .html/.jsp dans l'URL lorsque vous utilisez Spring MVC. Toute la ressource est liée à une vue, en utilisant le résolveur de vue. C'est ainsi que cela doit être mis en œuvre. C'est pour ça "MVC" et "voir-résoudre".

REMARQUE:

Selon votre configuration actuelle, "vous devez modifier une URL demandée". NON, vous ne pouvez pas. Votre URL peut alors être http://localhost:8083/releaseDashboard/project/CSOB.html; et projectName est "CSOB.html". Ensuite, vous devez utiliser la fonction Java substring pour extraire "CSOB" de "CSOB.html". Et c'est une chose laide!

+0

Merci pour votre réponse. Donc, si je vais à cet URL http: // localhost: 8083/releaseDashboard/projet/CSOB, il montrera le contenu de hello.jsp. C'est très bien. Mais à partir de cette URL, lorsque je clique sur ma page d'accueil, l'URL est affichée comme http: // localhost: 8083/releaseDashboard/project/home et mappée à la même méthode de contrôleur à la place de @RequestMapping (valeur = {"home"}) – sreehari

+0

"quand je clique sur ma maison". Changez l'URL sur ce bouton. De toute évidence, vous utilisez une URL relative. Fais-le bien. Référer ceci. http://stackoverflow.com/questions/5559578/having-links-relative-to-root –

+0

Actuellement, mon action sur le bouton home est "home". Alors quel devrait être mon URL? – sreehari