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 <[email protected]> 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