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