2014-05-21 16 views
6

Pracuję nad projektem, w którym chcę zapewnić unikalny adres URL dla każdego użytkownika. Na przykład,Jak tworzyć niestandardowe adresy URL za pomocą Struts2? Podobnie jak www.twitter.com/goodyzain

http://www.SocialNetwork.com/jhon , http://www.SocialNetwork.com/jasmine, 

Do tej pory jestem w stanie to osiągnąć: http://www.SocialNetwork.com/profiles/jasmine profile tutaj jest moje działanie, gdzie mogę uzyskać nazwę użytkownika poprzez

<constant name="struts.mapper.alwaysSelectFullNamespace" value="false"/> 
<constant name="struts.enable.SlashesInActionNames" value="true"/> 
<constant name="struts.patternMatcher" value="namedVariable"/> 


<action name="profiles/{username}" class="com.example.actions.ViewProfileAction"> 
    <result name="input">/WEB-INF/jsp/profile.jsp</result> 
</action> 

ale chcę osiągnąć coś takiego, http://www.SocialNetwork.com/jasmine Po prostu nazwa domeny, a następnie nazwa użytkownika.

takich jak Twitter czy:

www.twitter.com/username

Jak to osiągnąć?

+0

Dlaczego więc wstawiasz 'profiles /' przed nazwą akcji, jeśli nie chcesz, aby tam była? –

+1

Nie potrzebuję profili do URL ... dla użytkowników powinien być prosty ... jak nazwa domeny/nazwa użytkownika ... prosty .. – goodyzain

+0

Więc usuń go z nazwy akcji. –

Odpowiedz

2

Jeśli chcesz używać nazwanych wzorców w wieloznacznego mapowania następnie należy skonfigurować następujące parametry w struts.xml:

<constant name="struts.enable.SlashesInActionNames" value="true"/> 
<constant name="struts.mapper.alwaysSelectFullNamespace" value="false"/> 
<constant name="struts.patternMatcher" value="regex"/> 

teraz zakładamy com.example.actions.ViewProfileAction fasola ma właściwość username i metoda execute, która zwraca wynik SUCCESS. Następnie możesz odwzorować akcję w obszarze nazw root "/" skonfigurowaną do pakietu.

<action name="{username}" class="com.example.actions.ViewProfileAction"> 
    <result>/WEB-INF/jsp/profile.jsp</result> 
</action> 

można uzyskać nazwę w JSP przy użyciu OGNL

<s:property value="username"/> 

Należy również pamiętać, że należy wdrożyć w kontekście głównego mieć

your.domain.com/username mapowane do działania.

1

Wypróbuj to. To może działać. Użyj Freemarker USE .

<action name="profiles/${username}" class="com.example.actions.ViewProfileAction"> 
    <result name="input">/WEB-INF/jsp/profile.jsp</result> 
</action> 

może pracować

+0

będzie działać dobrze ... Chcę, aby adres URL wyglądał tak ... SocialNetwork/jasmine Nie jak SocialNetwork/profiles/jasmine Nie chcę wywoływać profili akcja ... w url – goodyzain

+0

Więc nie używaj profili. użyj tylko action name = "$ {username}". to zadziała dla ciebie. – Paresh3489227

+0

SocialNetwork to nazwa domeny, jaśmin to nazwa użytkownika ... Profile to nazwa działania ... Nie chcę, aby użytkownik wprowadzał nazwę działania, która jest profilem ... i chce tylko, aby wprowadzili oni nazwę domeny/nazwy użytkownika UWAGA: nazwa akcji nie jest nazywana w adresie URL – goodyzain

Powiązane problemy