2014-05-21 14 views
6

Sto lavorando a un progetto in cui desidero fornire un URL univoco per ciascun utente. Ad esempio,Come creare URL personalizzati con Struts2? Come www.twitter.com/goodyzain

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

Finora sono in grado di raggiungere questo obiettivo: http://www.SocialNetwork.com/profiles/jasmine qui Profili è la mia azione dove posso ottenere il nome utente

<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> 

ma voglio ottenere qualcosa di simile, http://www.SocialNetwork.com/jasmine Solo nome dominio, quindi nome utente.

come Twitter fa:

www.twitter.com/username

Come raggiungere questo obiettivo?

+0

Quindi perché inserisci 'profiles /' davanti al nome dell'azione se non vuoi che sia lì? –

+1

non ho bisogno che i profili siano in URL ... per gli utenti dovrebbe essere semplice ... come Nome dominio/nome utente ... semplice .. – goodyzain

+0

Quindi rimuoverlo dal nome dell'azione. –

risposta

2

Se si desidera utilizzare i modelli indicati nella mappatura jolly allora si dovrebbe configurare segue nella struts.xml:

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

ora assumere com.example.actions.ViewProfileAction fagiolo ha una proprietà username, e metodo execute che restituisce un risultato SUCCESS. Quindi puoi mappare l'azione nel namespace radice "/" configurato per il tuo pacchetto.

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

è possibile ottenere il nome nel JSP usando OGNL

<s:property value="username"/> 

Si noti inoltre che è necessario distribuire al contesto principale di avere

your.domain.com/username mappato alla vostra azione.

1

Provalo. Potrebbe funzionare. Utilizzare Freemarker USE $.

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

Si può lavorare

+0

funzionerà bene ... voglio che l'URL assomigli a questo ... SocialNetwork/jasmine Non mi piace SocialNetwork/profiles/jasmine non voglio chiamare i profili action ... in url – goodyzain

+0

Quindi non usare i profili. usa solo action name = "$ {username}". funzionerà per te. – Paresh3489227

+0

SocialNetwork è il nome di dominio, Jasmine è nome utente ... Profili È il nome dell'azione ... Non voglio che l'utente inserisca il nome dell'azione che è profili .. voglio solo che li inserisca Nome/nome utente NOTA: nessun nome di azione è chiamato nell'URL – goodyzain

Problemi correlati