2010-05-12 3 views
0

J'essaie de mettre à jour une application web simple qui a été construite avec struts2, jsp et les servlets standard. J'essaie de rediriger une URL vers une action spécifique mais je n'arrive pas à la faire fonctionner correctement. Par exemple, l'URL est correcte est:Problème avec les actions et les redirections Struts

http://localhost:8080/theapp/lookup/search.action 

Voici mon web.xml:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
        "http://java.sun.com/dtd/web-app_2_3.dtd"><web-app> 
<display-name>theapp</display-name> 

<filter> 
    <filter-name>struts2</filter-name> 
    <filter-class> 
     org.apache.struts2.dispatcher.FilterDispatcher 
    </filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>struts2</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

<listener> 
    <listener-class> 
     org.springframework.web.context.ContextLoaderListener 
    </listener-class> 
</listener> 

Et voici mon struts.xml:

<?xml version="1.0" encoding="UTF-8" ?> 

<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration  
2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> 

<default-action-ref name="search" /> 

<action name="search" method="search" class="com.theapp.SearchAction" > 
    <result>index.jsp</result> 
    <result name="input" >index.jsp</result> 
    <result name="error" type="redirect">site_locator_mobile/error.action</result> 
</action> 

Le problème ici est que si je ne spécifie pas l'URL correcte comme ci-dessus, je viens d'obtenir le fichier index.jsp, mais sans les propriétés de l'indice. jsp en cours de traitement car les informations sont contenues dans la servlet.

Ce que je voudrais est si quelqu'un vient d'entrer:

http://localhost:8080/theapp/lookup/ 

qu'ils seraient prises pour:

http://localhost:8080/theapp/lookup/search.action 

Merci

+0

Hmm .. Je ne sais pas comment réparer le xml dans mon article ci-dessus afin que tout se passe dans le même bloc de code. – Casey

Répondre

0

Peut-être que vous pouvez spécifier un servlet comme un accueil fichier:

<welcome-file-list> 
<welcome-file>search.action<welcom-file> 
<welcome-file-list> 

Remarque: certaines personnes indiquent qu'un fichier appelé search.action doit réellement exister pour que cela fonctionne.

Une autre option est d'avoir votre index.jsp redirigent à search.action et utiliser un autre résultat jsp:

<% response.sendRedirect("search.action"); %> 

Edit: Il est également possible d'ajouter une directive filter-mapping directement à web.xml qui redirige les demandes de /theapp/lookup/-/theapp/lookup/search.action

Cela semble plus complexe, cependant.

+0

L'approche de fichier de bienvenue ne fonctionnera pas pour moi car elle redirigerait pour l'ensemble de l'application. L'index.jsp contient aussi des choses que je dois utiliser, ce n'est pas seulement un espace réservé. Je suppose que je pourrais renommer le fichier actuel en quelque chose d'autre et mettre un index.jsp qui redirige vers l'action appropriée. – Casey

0

Cela peut sembler stupide, mais pouvez-vous publier tout le contenu du fichier struts.xml? Avez-vous ajouté un espace de noms au fichier xml struts. Vous essayez de rechercher myApp/lookup/someAction.action. Je pense que vous devriez avoir un espace de nom défini pour votre paquet.

Questions connexes