Guys, I want to display images in a grid component. Those images are from a
database, and I use a componet
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import javax.imageio.ImageIO;
import org.apache.tapestry5.ComponentResources;
import org.apache.tapestry5.Link;
import org.apache.tapestry5.MarkupWriter;
import org.apache.tapestry5.StreamResponse;
import org.apache.tapestry5.annotations.Parameter;
import org.apache.tapestry5.ioc.annotations.Inject;
import org.apache.tapestry5.services.Response;
public class ImageBlock {
@Parameter (required=true)
private BufferedImage bufferedImage;
@Inject
private Response response;
@Inject
private ComponentResources componentResources;
boolean beginRender(MarkupWriter writer) {
Link link = componentResources.createEventLink("image");
writer.element("img",
"src", link.toAbsoluteURI(),
"width", bufferedImage.getWidth(),
"height", bufferedImage.getHeight());
componentResources.renderInformalParameters(writer);
writer.end();
return false;
}
void onImage() throws IOException {
response.setDateHeader("Expires", 0);
response.setHeader("Cache-Control",
"no-store, no-cache, must-revalidate");
response.setHeader("Cache-Control", "post-check=0, pre-check=0");
response.setHeader("Pragma", "no-cache");
OutputStream stream = response.getOutputStream("image/jpeg");
ImageIO.write(bufferedImage, "jpg", stream);
stream.flush();
stream.close();
}
}
This works well when I simply use
<t:ImageBlock bufferedImage="image"/>
When I try to use this in a grid, like this,
<t:grid source="photos" row="photo">
<p:imageCell>
<t:ImageBlock bufferedImage="photo.getImage()">
</p:imageCell>
</t:grid>
I get errors.
org.apache.tapestry5.internal.services.RenderQueueException
Render queue error in BeginRender[Search:grid.rows]: Failure writing
parameter 'row' of component Search:grid.rows: Failure writing parameter
'row' of component Search:grid: Could not find a coercion from type
java.lang.String to type domain.Photo. Available coercions: Double -->
Float, Float --> Double, Long --> Boolean, Long --> Byte, Long --> Double,
Long --> Integer, Long --> Short, Number --> Long, Object --> Object[],
Object --> String, Object --> java.util.List, Object[] --> java.util.List,
String --> Boolean, String --> Double, String --> Long, String -->
java.io.File, String --> java.math.BigDecimal, String -->
java.math.BigInteger, String --> java.text.DateFormat, String -->
java.util.regex.Pattern, String --> org.apache.tapestry5.Renderable, String
--> org.apache.tapestry5.SelectModel, String -->
org.apache.tapestry5.corelib.LoopFormState, String -->
org.apache.tapestry5.corelib.data.BlankOption, String -->
org.apache.tapestry5.corelib.data.GridPagerPosition, String -->
org.apache.tapestry5.corelib.data.InsertPosition, String -->
org.apache.tapestry5.ioc.Resource, String -->
org.apache.tapestry5.ioc.util.TimeInterval, boolean[] --> java.util.List,
byte[] --> java.util.List, char[] --> java.util.List, double[] -->
java.util.List, float[] --> java.util.List, int[] --> java.util.List,
java.math.BigDecimal --> Double, java.util.Collection --> Boolean,
java.util.Collection --> Object[], java.util.Collection -->
org.apache.tapestry5.grid.GridDataSource, java.util.List -->
org.apache.tapestry5.SelectModel, java.util.Map -->
org.apache.tapestry5.SelectModel, long[] --> java.util.List, null -->
Boolean, null --> org.apache.tapestry5.grid.GridDataSource,
org.apache.tapestry5.ComponentResources -->
org.apache.tapestry5.PropertyOverrides,
org.apache.tapestry5.PrimaryKeyEncoder -->
org.apache.tapestry5.ValueEncoder, org.apache.tapestry5.Renderable -->
org.apache.tapestry5.Block, org.apache.tapestry5.Renderable -->
org.apache.tapestry5.runtime.RenderCommand,
org.apache.tapestry5.ioc.util.TimeInterval --> Long,
org.apache.tapestry5.runtime.ComponentResourcesAware -->
org.apache.tapestry5.ComponentResources, short[] --> java.util.List.
Any suggestions?
Thanks very much!