Hi Andy, Thanks for adding this to Jira. See below my code what I have produced so far. The problem is that I now see the complete filepath in my html source (<img src=" C:/tmp/pictures/8/71/1001/thumb1.jpg" alt=""/>) I don't want the complete file url in my html source. How can I fix this. And how do I map the html url to the file url? The last problem is that the file url is correct, but the image is not shown in my html page. What am I doing wrong?
--Quick Example Code Below--- <img src="${ThumbnailPath}" alt="" /> public String getThumbnailPath() { Asset asset = assetSource.getAsset(null, "file:/8/71/1001/thumb1.jpg", null); return asset.toClientURL(); } public class FileSystemResource extends AbstractResource { private static final int PRIME = 37; public FileSystemResource(String path) { super(path); } @Override protected Resource newResource(String path) { return new FileSystemResource(path); } @Override public URL toURL() { String filePath = getPath(); File file = new File(filePath); if (file != null && file.exists()) { try { return file.toURL(); } catch (MalformedURLException ex) { throw new RuntimeException(ex); } } return null; } } public class FileSystemAssetFactory implements AssetFactory { private static final String assetPath = "/images/"; public FileSystemAssetFactory() { } @Override public Resource getRootResource() { return new FileSystemResource("C:/tmp/pictures/"); } @Override public Asset createAsset(final Resource resource) { final String filePath = resource.getPath(); return new Asset() { public Resource getResource() { return resource; } public String toClientURL() { return filePath; } /** * Returns the client URL, which is essiential to allow informal parameters of type * Asset to generate a proper value. */ @Override public String toString() { return toClientURL(); } }; } } //In AppModule.java public AssetFactory buildfileSystemAssetFactory() { return new FileSystemAssetFactory(); } public void contributeAssetSource(MappedConfiguration<String, AssetFactory> configuration, @InjectService("fileSystemAssetFactory") AssetFactory fileSystemAssetFactory) { configuration.add("file", fileSystemAssetFactory); } On Tue, Mar 10, 2009 at 3:28 PM, Andy Pahne <andy.pa...@googlemail.com>wrote: > > > There is a ClasspathAssetFactory and a ContextAssetFactory. A useful > addition to the framework would be a FilesystemAssetFactory. I am going to > fill an JIRA issue about it. > > The way I did it for classpath resources was very simple, see below. Only > the first two lines of renderIcon() are relevant for construction an asset. > > @BeginRender > public void renderIcon(MarkupWriter writer) { > > Resource iconResource = new ClasspathResource(BASE_PATH + src); > if(assetFactory == null) { > LOG.warn("assertFactory is null"); > } > if(iconResource == null) { > LOG.warn("iconResource is null"); > } > Asset icon = assetFactory.createAsset(iconResource); > > if(icon != null) { > > writer.element("img", > "src", icon.toClientURL(), > "alt", getAlt()); > > resources.renderInformalParameters(writer); > > writer.end(); > > } else { > > writer.writeRaw(getAlt()); > > } > > } > > > > @Inject @ClasspathProvider > private AssetFactory assetFactory; > > @BeginRender > public void renderIcon(MarkupWriter writer) { > > Resource iconResource = new ClasspathResource(BASE_PATH + src); > Asset icon = assetFactory.createAsset(iconResource); > > if(icon != null) { > > writer.element("img", > "src", icon.toClientURL(), > "alt", getAlt()); > > resources.renderInformalParameters(writer); > > writer.end(); > > } else { > > writer.writeRaw(getAlt()); > > } > > } > > > > > > > > > Peter Kanze schrieb: > > The documentation (http://tapestry.apache.org/tapestry5/guide/assets.html >> ) >> tells me to define a new AssetFactory and contribute it to the AssetSource >> service configuration. >> Yes okay, but how do I implement an AssetFactory? Is there any >> documentation? >> >> What do I need to do with public Resource getRootResource() and public >> Asset >> createAsset(Resource resource); >> I also looked at ClasspathAssetFactory but don't understand it. The >> comment >> is too minimal. >> >> Can someone help me with this? >> >> Thanks, >> Peter! >> >> On Tue, Mar 10, 2009 at 1:59 PM, Peter Kanze <peterka...@gmail.com> >> wrote: >> >> >> >>> Oke thank you. >>> >>> But how do I map between the web http:// and the file D:/ urls? >>> Can you give me some (pseudo) code examples how to do this? >>> >>> Thanks! >>> Peter >>> >>> >>> >>> >>> On Tue, Mar 10, 2009 at 1:56 PM, Thiago H. de Paula Figueiredo < >>> thiag...@gmail.com> wrote: >>> >>> >>> >>>> On Tue, Mar 10, 2009 at 9:51 AM, Peter Kanze <peterka...@gmail.com> >>>> wrote: >>>> >>>> >>>>> I already searched the archive and found the question, but it is not >>>>> >>>>> >>>> clear >>>> >>>> >>>>> to me. >>>>> There are no examples in it with a dynamic path.. >>>>> >>>>> >>>> You'll use AssetSource for that. >>>> >>>> -- >>>> Thiago >>>> >>>> --------------------------------------------------------------------- >>>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org >>>> For additional commands, e-mail: users-h...@tapestry.apache.org >>>> >>>> >>>> >>>> >>> >> >> > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org > For additional commands, e-mail: users-h...@tapestry.apache.org > >