2016-04-27 11 views
3

gehandhabt Ich spiele gerade mit meiner Struts2-Konfiguration für Wildcard-Tests und ich bin mit diesem fest.Struts2 Wildcard-Mapping - spezifischer wird von generischen

<action name="/*/*" class="checkBlogUrl" method="testing"> 
     <param name="blogSiteUrl">{1}</param> 
     <param name="test">{2}</param> 
     <result name="success">/WEB-INF/jsp/cmsPages/index.jsp</result> 
    </action> 

    <action name="/*/postPreview1" class="blogPostAction" method="test"> 
     <param name="blogSiteUrl">{1}</param> 
     <result name="success">/WEB-INF/jsp/cmsPages/templatePicker.jsp</result> 
    </action> 

Wenn ich myurl.com/hello/hi zugreifen will ich

index.jsp werden umgeleitet Aber wenn ich myurl.com/hello/postPreview1 zugreifen will ich auch index.jsp statt templatePicker.jsp weitergeleitet.

Mache ich hier etwas falsch? Die struts wildcard doc sagte, dass die letzte gewinnt

EDIT: Nur versucht, um sie herum und es funktionierte O_O. Vergiss ich das Dokument falsch?

+0

Was ist '/ hallo'? Ist es ein Kontextpfad? –

+0

Siehe https://struts.apache.org/docs/action-configuration.html#ActionConfiguration-WildcardDefault. –

+0

@RomanC Ich bin mir nicht sicher über die Bedeutung von Kontextpfad. Das/Hallo kann ein beliebiges Wort sein, ich muss es abfragen, wenn es in der Datenbank existiert. der nächste Schrägstrich sind Aktionen –

Antwort

3

Sie verwenden Schrägstriche im Aktionsnamen, der fälschlicherweise mit Platzhalter arbeitet. Wie ich in der verknüpften answer sagte, ist der beste Mustervergleicher in diesem Fall der regex Mustervergleicher.

<constant name="struts.patternMatcher" value="regex"/> 

Siehe Advanced Wildcards.

<action name="/{blogSiteUrl}/{test}" class="checkBlogUrl" method="testing"> 
    <result name="success">/WEB-INF/jsp/cmsPages/index.jsp</result> 
</action> 

<action name="/{blogSiteUrl}/postPreview1" class="blogPostAction" method="test"> 
    <result name="success">/WEB-INF/jsp/cmsPages/templatePicker.jsp</result> 
</action> 

Über docs für Wildcard-Mapper. Schauen wir uns das Beispiel blank Anwendung:

<package name="example" namespace="/example" extends="default"> 

    <action name="HelloWorld" class="example.HelloWorld"> 
     <result>/WEB-INF/jsp/example/HelloWorld.jsp</result> 
    </action> 

    <action name="Login_*" method="{1}" class="example.Login"> 
     <result name="input">/WEB-INF/jsp/example/Login.jsp</result> 
     <result type="redirectAction">Menu</result> 
    </action> 

    <action name="*" class="example.ExampleSupport"> 
     <result>/WEB-INF/jsp/example/{1}.jsp</result> 
    </action> 

    <!-- Add actions here --> 
</package> 

So werden URLs in der Reihenfolge abgestimmt werden:

  1. http://localhost:8080/example/HelloWorld
  2. http://localhost:8080/example/Login_input
  3. http://localhost:8080/example/Register

Ich würde sagen, dass mehr spezifische Zuordnung vor weniger spezifische/gemeinsame Zuordnung und es gewinnt, weil es zuerst in der Reihenfolge der Aktion-Konfigurationen gefunden wird. Alles, was nicht mit den bestellten Konfigurationen übereinstimmt, fällt in die letzte Zuordnung, die weniger spezifisch ist.