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!

Reply via email to