Re: T5: How to load image Asset from filesystem?
Hi Daniel, Currently I load my (user uploaded) images using a StreamResponse as you explained. The pictures are shown in my webpage, but for every loaded picture the onActivate is called. With a result list of 15 rows per page, this is 16 times. In my onActivate I also call my doSearch method. So this behaviour is not what I want. Is there a way to solve this problem? Thanks! Peter On Fri, Mar 13, 2009 at 3:42 AM, Daniel Jones d...@murieston.com wrote: Hi Peter, I'm using nabble to post and it seems to have stripped out the img tag. you need an img tag in your template and set the src attribute to ${imagePath} img src=${imagePath} Hope this helps, Daniel Peter Kanze wrote: Hi Daniel, Thanks for your example. I tried this one, but the Object onImage is never called when the page loads. I am using Tapestry 5.1. The code is equal to your example. What could I do wrong? regards, Peter On Thu, Mar 12, 2009 at 10:54 AM, Daniel Jones d...@murieston.com wrote: PAGE CLASS inject component resources so that you can create an action link @Inject private ComponentResources mComponentResources; when the path is requested by the template, create and return an action link public Link getImagePath() { return mComponentResources.createActionLink(image, false, mItem.getID()); } handle this action link public Object onImage(long pID) { StreamResponseBuilder is a class that I have implemented, it basically figures out what image to served based on the id passed in the context and then gets an InputStream for the image file on disk and creates and returns a StreamResponse, so essentially you want this action handler to return a StreamResponse of the image you want to display. return StreamResponseBuilder.getItemImage(pID); } PAGE TEMPLATE ${imagePath} Hope this helps Regards, Daniel Peter Kanze wrote: Hello I want to load images from the filesystem, like for example D:/category/1/products/55/thumb.jpg So the file path is dynamic and is based on the categoryId and the productId. How can I load such an image into my webpage using a Tapestry Asset? This looks like a common usecase to me, but I couldn't find any info about it. Has somebody already done this? And could he/she show me some code examples? Any help is welcome! Thanks, Peter -- View this message in context: http://www.nabble.com/T5%3A-How-to-load-image-Asset-from-filesystem--tp22433419p22471474.html Sent from the Tapestry - User mailing list archive at Nabble.com. - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org -- View this message in context: http://www.nabble.com/T5%3A-How-to-load-image-Asset-from-filesystem--tp22433419p22489180.html Sent from the Tapestry - User mailing list archive at Nabble.com. - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: T5: How to load image Asset from filesystem?
Thanks for pointing that out Luther. I copied it from a project using an older version of tapestry. luther.baker wrote: Great example - similar to an example on the Wiki ... Note that 'createActionLink' was deprecated ... http://tapestry.apache.org/tapestry5/apidocs/org/apache/tapestry5/ComponentResources.html#createActionLink(java.lang.String,%20boolean,%20java.lang.Object.. .) *Deprecated.* *Use createEventLink(String, Object[])http://tapestry.apache.org/tapestry5/apidocs/org/apache/tapestry5/ComponentResources.html#createEventLink%28java.lang.String,%20java.lang.Object...%29instead * -Luther On Thu, Mar 12, 2009 at 9:42 PM, Daniel Jones d...@murieston.com wrote: Hi Peter, I'm using nabble to post and it seems to have stripped out the img tag. you need an img tag in your template and set the src attribute to ${imagePath} img src=${imagePath} Hope this helps, Daniel Peter Kanze wrote: Hi Daniel, Thanks for your example. I tried this one, but the Object onImage is never called when the page loads. I am using Tapestry 5.1. The code is equal to your example. What could I do wrong? regards, Peter On Thu, Mar 12, 2009 at 10:54 AM, Daniel Jones d...@murieston.com wrote: PAGE CLASS inject component resources so that you can create an action link @Inject private ComponentResources mComponentResources; when the path is requested by the template, create and return an action link public Link getImagePath() { return mComponentResources.createActionLink(image, false, mItem.getID()); } handle this action link public Object onImage(long pID) { StreamResponseBuilder is a class that I have implemented, it basically figures out what image to served based on the id passed in the context and then gets an InputStream for the image file on disk and creates and returns a StreamResponse, so essentially you want this action handler to return a StreamResponse of the image you want to display. return StreamResponseBuilder.getItemImage(pID); } PAGE TEMPLATE ${imagePath} Hope this helps Regards, Daniel Peter Kanze wrote: Hello I want to load images from the filesystem, like for example D:/category/1/products/55/thumb.jpg So the file path is dynamic and is based on the categoryId and the productId. How can I load such an image into my webpage using a Tapestry Asset? This looks like a common usecase to me, but I couldn't find any info about it. Has somebody already done this? And could he/she show me some code examples? Any help is welcome! Thanks, Peter -- View this message in context: http://www.nabble.com/T5%3A-How-to-load-image-Asset-from-filesystem--tp22433419p22471474.html Sent from the Tapestry - User mailing list archive at Nabble.com. - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org -- View this message in context: http://www.nabble.com/T5%3A-How-to-load-image-Asset-from-filesystem--tp22433419p22489180.html Sent from the Tapestry - User mailing list archive at Nabble.com. - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org -- View this message in context: http://www.nabble.com/T5%3A-How-to-load-image-Asset-from-filesystem--tp22433419p22501228.html Sent from the Tapestry - User mailing list archive at Nabble.com. - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: T5: How to load image Asset from filesystem?
PAGE CLASS inject component resources so that you can create an action link @Inject private ComponentResources mComponentResources; when the path is requested by the template, create and return an action link public Link getImagePath() { return mComponentResources.createActionLink(image, false, mItem.getID()); } handle this action link public Object onImage(long pID) { StreamResponseBuilder is a class that I have implemented, it basically figures out what image to served based on the id passed in the context and then gets an InputStream for the image file on disk and creates and returns a StreamResponse, so essentially you want this action handler to return a StreamResponse of the image you want to display. return StreamResponseBuilder.getItemImage(pID); } PAGE TEMPLATE ${imagePath} Hope this helps Regards, Daniel Peter Kanze wrote: Hello I want to load images from the filesystem, like for example D:/category/1/products/55/thumb.jpg So the file path is dynamic and is based on the categoryId and the productId. How can I load such an image into my webpage using a Tapestry Asset? This looks like a common usecase to me, but I couldn't find any info about it. Has somebody already done this? And could he/she show me some code examples? Any help is welcome! Thanks, Peter -- View this message in context: http://www.nabble.com/T5%3A-How-to-load-image-Asset-from-filesystem--tp22433419p22471474.html Sent from the Tapestry - User mailing list archive at Nabble.com. - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: T5: How to load image Asset from filesystem?
That one is really nice. Thanks. Daniel Jones schrieb: PAGE CLASS inject component resources so that you can create an action link @Inject private ComponentResources mComponentResources; when the path is requested by the template, create and return an action link public Link getImagePath() { return mComponentResources.createActionLink(image, false, mItem.getID()); } handle this action link public Object onImage(long pID) { StreamResponseBuilder is a class that I have implemented, it basically figures out what image to served based on the id passed in the context and then gets an InputStream for the image file on disk and creates and returns a StreamResponse, so essentially you want this action handler to return a StreamResponse of the image you want to display. return StreamResponseBuilder.getItemImage(pID); } PAGE TEMPLATE ${imagePath} Hope this helps Regards, Daniel Peter Kanze wrote: Hello I want to load images from the filesystem, like for example D:/category/1/products/55/thumb.jpg So the file path is dynamic and is based on the categoryId and the productId. How can I load such an image into my webpage using a Tapestry Asset? This looks like a common usecase to me, but I couldn't find any info about it. Has somebody already done this? And could he/she show me some code examples? Any help is welcome! Thanks, Peter - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: T5: How to load image Asset from filesystem?
Great example - similar to an example on the Wiki ... Note that 'createActionLink' was deprecated ... http://tapestry.apache.org/tapestry5/apidocs/org/apache/tapestry5/ComponentResources.html#createActionLink(java.lang.String,%20boolean,%20java.lang.Object.. .) *Deprecated.* *Use createEventLink(String, Object[])http://tapestry.apache.org/tapestry5/apidocs/org/apache/tapestry5/ComponentResources.html#createEventLink%28java.lang.String,%20java.lang.Object...%29instead * -Luther On Thu, Mar 12, 2009 at 9:42 PM, Daniel Jones d...@murieston.com wrote: Hi Peter, I'm using nabble to post and it seems to have stripped out the img tag. you need an img tag in your template and set the src attribute to ${imagePath} img src=${imagePath} Hope this helps, Daniel Peter Kanze wrote: Hi Daniel, Thanks for your example. I tried this one, but the Object onImage is never called when the page loads. I am using Tapestry 5.1. The code is equal to your example. What could I do wrong? regards, Peter On Thu, Mar 12, 2009 at 10:54 AM, Daniel Jones d...@murieston.com wrote: PAGE CLASS inject component resources so that you can create an action link @Inject private ComponentResources mComponentResources; when the path is requested by the template, create and return an action link public Link getImagePath() { return mComponentResources.createActionLink(image, false, mItem.getID()); } handle this action link public Object onImage(long pID) { StreamResponseBuilder is a class that I have implemented, it basically figures out what image to served based on the id passed in the context and then gets an InputStream for the image file on disk and creates and returns a StreamResponse, so essentially you want this action handler to return a StreamResponse of the image you want to display. return StreamResponseBuilder.getItemImage(pID); } PAGE TEMPLATE ${imagePath} Hope this helps Regards, Daniel Peter Kanze wrote: Hello I want to load images from the filesystem, like for example D:/category/1/products/55/thumb.jpg So the file path is dynamic and is based on the categoryId and the productId. How can I load such an image into my webpage using a Tapestry Asset? This looks like a common usecase to me, but I couldn't find any info about it. Has somebody already done this? And could he/she show me some code examples? Any help is welcome! Thanks, Peter -- View this message in context: http://www.nabble.com/T5%3A-How-to-load-image-Asset-from-filesystem--tp22433419p22471474.html Sent from the Tapestry - User mailing list archive at Nabble.com. - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org -- View this message in context: http://www.nabble.com/T5%3A-How-to-load-image-Asset-from-filesystem--tp22433419p22489180.html Sent from the Tapestry - User mailing list archive at Nabble.com. - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: T5: How to load image Asset from filesystem?
Hi! Search this mailing list archives because this was already asked here: http://www.nabble.com/forum/Search.jtp?forum=340local=yquery=asset+filesystem. -- Thiago - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: T5: How to load image Asset from filesystem?
Hello 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.. On Tue, Mar 10, 2009 at 1:45 PM, Thiago H. de Paula Figueiredo thiag...@gmail.com wrote: Hi! Search this mailing list archives because this was already asked here: http://www.nabble.com/forum/Search.jtp?forum=340local=yquery=asset+filesystem . -- Thiago - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: T5: How to load image Asset from filesystem?
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
Re: T5: How to load image Asset from filesystem?
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
Re: T5: How to load image Asset from filesystem?
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
Re: T5: How to load image Asset from filesystem?
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
Re: T5: How to load image Asset from filesystem?
On Tue, Mar 10, 2009 at 11:28 AM, 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. +1 to that. I guess we only have to decide if only one root directory will be used or more than one. By the way, nice example. :) -- Thiago - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: T5: How to load image Asset from filesystem?
https://issues.apache.org/jira/browse/TAP5-567 Thiago H. de Paula Figueiredo schrieb: On Tue, Mar 10, 2009 at 11:28 AM, 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. +1 to that. I guess we only have to decide if only one root directory will be used or more than one. By the way, nice example. :) - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: T5: How to load image Asset from filesystem?
The proposed solution in the issue is a bit different. Both is possible, I hope the developers pick up the issue and choose a nice solution. Andy Andy Pahne schrieb: https://issues.apache.org/jira/browse/TAP5-567 Thiago H. de Paula Figueiredo schrieb: On Tue, Mar 10, 2009 at 11:28 AM, 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. +1 to that. I guess we only have to decide if only one root directory will be used or more than one. By the way, nice example. :) - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: T5: How to load image Asset from filesystem?
I don't know much about the details how you contribute your FilesystemAssetFactory. Never had time to take a briefer look at tapestry-ioc. Please note: in the previous example the AssetFactory is injected like this: @Inject @ClasspathProvider private AssetFactory assetFactory; The @ClasspathProvider is necessary, so that tapestry-ioc knows, which of the different implementations to inject. Maybe, in order to make your solution work, you need to give a hint like that, too? Andy Peter Kanze schrieb: 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(MappedConfigurationString, AssetFactory configuration, @InjectService(fileSystemAssetFactory) AssetFactory fileSystemAssetFactory) { configuration.add(file, fileSystemAssetFactory); } On Tue, Mar 10, 2009 at 3:28 PM, Andy Pahne andy.pa...@googlemail.comwrote: 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
Re: T5: How to load image Asset from filesystem?
Anyway you are right: exposing the full path in the html source is certainly not a good idea. Peter Kanze schrieb: 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? - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org