Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to create custom URL in Struts 2? Like www.twitter.com/goodyzain

I am working on a project where I want to provide unique URL for each user.

For example:

  • www.SocialNetwork.com/jhon
  • www.SocialNetwork.com/jasmine

So far I'm able to achieve this:

  • www.SocialNetwork.com/profiles/jasmine

here profiles is my action where I can get the user name by

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

but I want to achieve something like this:

  • www.SocialNetwork.com/jasmine

Just use domain name and username.

Like Twitter does:

  • www.twitter.com/username

How to achieve this?

like image 579
goodyzain Avatar asked May 21 '14 10:05

goodyzain


2 Answers

If you want to use named patterns in wildcard mapping then you should configure following in the struts.xml:

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

now assume com.example.actions.ViewProfileAction bean has a property username, and method execute that returns a SUCCESS result. Then you can map the action in the root namespace "/" configured to your package.

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

you can get the name in the JSP using OGNL

<s:property value="username"/>

Also note that you should deploy to the root context to have

your.domain.com/username mapped to your action.

like image 77
Roman C Avatar answered Nov 20 '22 14:11

Roman C


Try this out. It may work. Use Freemarker USE $.

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

It may work

like image 32
Paresh3489227 Avatar answered Nov 20 '22 15:11

Paresh3489227