Here is my code. TemplateResource.java public class TemplateResource implements Resource{
private URI uri; public TemplateResource(String uri) { try { this.uri = new URI(uri); } catch (URISyntaxException e) { throw new RuntimeException(e); } } public TemplateResource(URI uri) throws MalformedURLException { this.uri = uri; } public TemplateResource(File file) throws MalformedURLException { this(file.toURI()); } public TemplateResource(URL url) throws URISyntaxException, MalformedURLException { this(url.toURI()); } protected Resource newResource(String uri) { return new TemplateResource(uri); } @Override public boolean exists() { InputStream is = null; try { is = uri.toURL().openStream(); int i = is.read(); return true; } catch (Exception e) { return false; } finally { try { if (is != null) is.close(); } catch (Exception e) { // do nothing } } } @Override public Resource forFile(String relativePath) { return createResource(relativePath); } @Override public Resource forLocale(Locale locale) { for (String path : new LocalizedNameGenerator(this.uri.toString(), locale)) { Resource potential = createResource(path); if (potential.exists()) return potential; } return null; } private Resource createResource(String path) { if (this.uri.toString().equals(path)) return this; return newResource(path); } @Override public String getFile() { String fileName = ""; String completePath = toURL().getPath(); if (completePath != null) { if (completePath.lastIndexOf('/') > 0) fileName = completePath.substring(completePath.lastIndexOf('/') + 1); else fileName = completePath; } return fileName; } @Override public String getFolder() { String folderName = ""; String completePath = toURL().getPath(); if (completePath != null) { int lastSlash = completePath.lastIndexOf('/'); if (lastSlash > 0) folderName = completePath.substring(0, lastSlash); } return folderName; } @Override public String getPath() { return toURL().toExternalForm(); } @Override public InputStream openStream() throws IOException { return uri.toURL().openStream(); } @Override public URL toURL() { try { if (exists()) return uri.toURL(); } catch (Exception e) { // do nothing } return null; } @Override public Resource withExtension(String extension) { throw new RuntimeException("not implemented yet!"); } @Override public boolean equals(Object obj) { if (obj == null) return false; if (obj == this) return true; if (obj.getClass() != getClass()) return false; TemplateResource other = (TemplateResource) obj; return other.getPath().equals(getPath()); } } TemplateAssetFactory.java public class TemplateAssetFactory implements AssetFactory { private final boolean invariant; private Resource rootResource; public TemplateAssetFactory() { this.invariant = true; } @Override public Asset createAsset(final Resource resource) { return new AbstractAsset(invariant) { @Override public String toClientURL() { return resource.getPath(); } @Override public Resource getResource() { return resource; } }; } @Override public Resource getRootResource() { rootResource = new TemplateResource("/"); return rootResource; } } TemplateProvider.java @Target({ ElementType.PARAMETER, ElementType.FIELD, ElementType.METHOD }) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface TemplateProvider { } TemplateAssetConstants.java public class TemplateAssetConstants extends AssetConstants { public static final String TEMPLATE = "template"; } Some config in AppModule.java @Marker(TemplateProvider.class) public AssetFactory buildTemplateAssetFactory() { return new TemplateAssetFactory(); } public void contributeAssetSource( MappedConfiguration<String, AssetFactory> configuration, @TemplateProvider AssetFactory templateAssetFactory) { configuration .add(TemplateAssetConstants.TEMPLATE, templateAssetFactory); } some code in tml : <x:dynamic template="asset:template: http://192.168.1.105:8080/dynamic2.html"> It works well. Now I wnat to change it like this <x:dynamic template="asset:template:dynamic2.html"> I want the server root path http://192.168.1.105:8080/ is configurable using tapestry symbols,so how can i change my code ?