Hi,

I am having problem binding a parameter of type byte[]. It is not bound for
some reason while imageTitle works as expected. The page template looks
like:

<t:dynaimage t:image="imageBytes" t:title="imageTitle"/>

DynaImage is my custom component which displays image from byte[], or so it
should :-)

In my page class:

    @Property
    private String imageTitle;

    @Property
    private byte[] imageBytes;

    void onActivate(Game game) {
        this.game = game;
        this.imageBytes = game.getImage();
        this.imageTitle = "Hello";
        logger.info("image size: " + this.imageBytes.length); // correctly
displays image size (cca 200kbytes)
    }

And here is the component class:

public class DynaImage {

    @Inject
    private Logger logger;

    @Inject
    private ComponentResources componentResources;

    @Parameter(name = "imageBytes", required = false)
    private byte[] imageBytes;

    @Parameter(name = "title", required = false)
    private String title;

    @BeginRender
    protected boolean beginRender(MarkupWriter writer) throws SQLException {
        if (!componentResources.isBound("title")) {
            logger.warn("title not bound.");
        } else {
            logger.info("title: " + title);
        }
        if (!componentResources.isBound("imageBytes")) {
            logger.warn("imageBytes not bound.");
            return true;
        }

        ImageIcon image = null;

        image = new ImageIcon(imageBytes);

        // Write an action link for this photo
        final Link link = componentResources.createEventLink("photo", new
Object[] { 999 });
        writer.element("img", "src", link, "title", title, "alt", "Loading "
+ title, "height",
            image.getIconHeight(), "width", image.getIconWidth());
        componentResources.renderInformalParameters(writer);

        writer.end();
        return true;
    }


Any help appreciated,
Borut

Reply via email to