Try to write Brownie or Omelette...
package es.carlosmontero.webapp.t5devutil.pages.components; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.tapestry5.annotations.Import; import org.apache.tapestry5.annotations.Property; import org.apache.tapestry5.ioc.annotations.Inject; import org.apache.tapestry5.services.PageRenderLinkSource; import es.carlosmontero.webapp.t5devutil.util.ModelObject; @Import(module = "autocomplete", stylesheet = "css/file1.css") public class AutocompletePage { public static final List<ModelObject> MODEL_OBJECTS; static { MODEL_OBJECTS = new ArrayList<ModelObject>(); MODEL_OBJECTS.add(new ModelObject(0, "Brownie", "Special compact cake with walnuts", "http://elcocinerocasero.com/imagen/receta/200/200/2015-12-28-13-10/brownie-de-chocolate.jpeg")); MODEL_OBJECTS .add(new ModelObject( 1, "Spanish omelette", "It is one of the typical dishes of Spanish cuisine that stands out is so tasty and the simplicity of its ingredients.", "http://elcocinerocasero.com/imagen/receta/200/200/2016-05-04-10-39/tortilla-de-patata.jpeg")); } @Inject private PageRenderLinkSource pageRenderLinkSource; @Property private String text, text2; public List<Map<String, String>> onCompletionsRequestedFromText(final String partial) { final List<Map<String, String>> result = new ArrayList<Map<String, String>>(); for (final ModelObject mo : MODEL_OBJECTS) { if (mo.getName().toLowerCase().contains(partial.toLowerCase())) { final Map<String, String> match = new HashMap<String, String>(); match.put("name", mo.getName()); match.put("link", pageRenderLinkSource.createPageRenderLinkWithContext(AutocompleteResultPage.class, mo.getId()) .toAbsoluteURI()); match.put("desc", mo.getDescription()); match.put("imageUrl", mo.getImageUrl()); result.add(match); } } return result; } }