Carlos,

Many thanks for this - this is absolutely fantastic. Thank you for the
effort of posting this and the help. It'll take me a little bit of time to
digest it and fully understand how I can apply this to our exact project,
but it looks like everything I need is here!

Many thanks again, I really appreciate it.
Stephen Nutbrown

On 2 May 2016 at 11:38, Carlos Montero Canabal <
carlosmonterocana...@gmail.com> wrote:

> Yes. I do it in many webapps.
>
> AppModule:
>
>         @Contribute(PageRenderLinkTransformer.class)
>         @Primary
>         public static void provideURLRewriting(final
> OrderedConfiguration<PageRenderLinkTransformer> configuration) {
>
>                 configuration.addInstance(
>                         “MyLinkTransformer", MyLinkTransformer.class);
>         }
>
> For simple pages (without context), I have a utility class with
> logicalPage name and the names into various languages (Spanish and English
> in the example) for better SEO on each language:
>
>         private class PageLinkTransFormer {
>
>                 private final String logical;
>
>                 private final String linkEs;
>
>                 private final String linkEn;
>
>                 public PageLinkTransFormer(final String logical, final
> String linkEs, final String linkEn) {
>                         super();
>                         this.logical = logical;
>                         this.linkEs = linkEs;
>                         this.linkEn = linkEn;
>                 }
>
>                 public String getLogical() {
>                         return logical;
>                 }
>
>                 public String getLinkEs() {
>                         return linkEs;
>                 }
>
>                 public String getLinkEn() {
>                         return linkEn;
>                 }
>
>         }
>
>
> And the MyLinkTransformer Service (in the example, I have the pages
> DevolucionesPage, AvisoLegalPage and SizeGuidePage):
>
>         public class MyLinkTransformer implements
> PageRenderLinkTransformer {
>
>         private static final String DEVOLUCIONES_LOGICAL_PAGE_NAME =
> "Devoluciones";
>
>         private static final String DEVOLUCIONES_PAGE_URL_ES =
> "/envios-devoluciones-cuidados";
>
>         private static final String DEVOLUCIONES_PAGE_URL_EN =
> "/delivery-return-cares";
>
>         private static final String AVISO_LEGAL_LOGICAL_PAGE_NAME =
> "AvisoLegal";
>
>         private static final String AVISO_LEGAL_PAGE_URL_ES =
> "/aviso-legal";
>
>         private static final String AVISO_LEGAL_PAGE_URL_EN =
> "/disclaimer";
>
>         private static final String SIZE_GUIDE_LOGICAL_PAGE_NAME =
> "SizeGuide";
>
>         private static final String SIZE_GUIDE_PAGE_URL_ES =
> "/guia-tallas";
>
>         private static final String SIZE_GUIDE_PAGE_URL_EN = "/size-guide";
>
>         private final List<PageLinkTransFormer> links;
>
>         @Inject
>         private PageRenderLinkSource pageRenderLinkSource;
>
>         @Inject
>         private ContextValueEncoder contextValueEncoder;
>
>         @Inject
>         private ThreadLocale threadLocale;
>
>         @Inject
>         private PersistentLocale persistentLocale;
>
>         public MyLinkTransformer() {
>
>                 links = new
> ArrayList<MyLinkTransformer.PageLinkTransFormer>();
>
>                 links.add(new PageLinkTransFormer(
>                         DEVOLUCIONES_LOGICAL_PAGE_NAME,
>                         DEVOLUCIONES_PAGE_URL_ES,
>                         DEVOLUCIONES_PAGE_URL_EN));
>
>                 links.add(new PageLinkTransFormer(
>                         AVISO_LEGAL_LOGICAL_PAGE_NAME,
>                         AVISO_LEGAL_PAGE_URL_ES,
>                         AVISO_LEGAL_PAGE_URL_EN));
>
>                 links.add(new PageLinkTransFormer(
>                         SIZE_GUIDE_LOGICAL_PAGE_NAME,
>                         SIZE_GUIDE_PAGE_URL_ES,
>                         SIZE_GUIDE_PAGE_URL_EN));
>
>         }
>
>         @Override
>         public Link transformPageRenderLink(final Link defaultLink, final
> PageRenderRequestParameters parameters) {
>
>                 LOGGER.trace("transformPageRenderLink {} ({})",
> parameters.getLogicalPageName(), defaultLink.toAbsoluteURI());
>
>                 final String locale = threadLocale.getLocale().toString();
>                 for (final PageLinkTransFormer link : links) {
>                         if
> (link.getLogical().equals(parameters.getLogicalPageName())) {
>                                 if ("es".equals(locale)) {
>                                         return
> defaultLink.copyWithBasePath(link.getLinkEs());
>                                 }
>                                 else {
>                                         return
> defaultLink.copyWithBasePath(link.getLinkEn());
>                                 }
>                         }
>                 }
>
>                 return null;
>         }
>
>         @Override
>         public PageRenderRequestParameters decodePageRenderRequest(final
> Request request) {
>
>                 String requestPath = request.getPath();
>                 if (persistentLocale.isSet()) {
>                         requestPath = requestPath.substring(3);
>                 }
>
>                 for (final PageLinkTransFormer link : links) {
>                         if (requestPath.equals(link.getLinkEn()) ||
> requestPath.equals(link.getLinkEs())) {
>                                 return new
> PageRenderRequestParameters(link.getLogical(), new EmptyEventContext(),
> false);
>                         }
>
>                 }
>
>                 return null;
>         }
>
> With context is simple to do it. I hope help you.
>
> Regards
>
> Carlos Montero
>
> > El 2/5/2016, a las 11:51, Stephen Nutbrown <steves...@gmail.com>
> escribió:
> >
> > Hi,
> >
> > I am working on a tapestry project and someone has asked me to change the
> > URLs to include hyphens which they believe will improve SEO.
> >
> > As per https://support.google.com/webmasters/answer/76329?hl=en, it's
> > supposedly good practise to "Consider using punctuation in your URLs. The
> > URL *http://www.example.com/green-dress.html
> > <http://www.example.com/green-dress.html>* is much more useful to us
> > than *http://www.example.com/greendress.html
> > <http://www.example.com/greendress.html>*. We recommend that you use
> > hyphens (-) instead of underscores (_) in your URLs."
> >
> > So, let's say I have a page called: GreenDress, which has a
> GreenDress.java
> > and a GreenDress.tml.
> >
> > Is there any way I can change that to "Green-Dress"? I'm not sure a
> hyphen
> > is even a valid character in a Java class name, so I assume there is
> > another way to do it?
> >
> > Thanks,
> > Steve
>
>

Reply via email to