tanamonの稀に良く書く日記

KEEP CALM AND DRINK BEER

Wicketのカスタムコンポーネントでベーコンを表示する

Wicketは画面部品をコンポーネント化することが大事なので、ためしに再利用性ゼロのコンポーネントを作ってみました。

Bacon.java

package example.bacon;

import org.apache.wicket.markup.ComponentTag;
import org.apache.wicket.markup.MarkupStream;
import org.apache.wicket.markup.html.WebComponent;
import org.apache.wicket.model.Model;

class Bacon extends WebComponent {
    static final String BACON_URL="http://bacolicious.s3.amazonaws.com/bacon.png";

    public Bacon(String id, final String symbol) {
        super(id, new Model<String>(symbol));
    }

    @Override
    protected void onComponentTagBody(final MarkupStream markupStream, final ComponentTag openTag) {
        String html = String.format("<img src=\"%s\" alt=\"%s\"/>", BACON_URL, getDefaultModelObjectAsString());
        replaceComponentTagBody(markupStream, openTag, html);
    }
}

Baconコンポーネントでは、あのベーコン画像を表示するimgタグを生成します。
ベーコンかわいいよベーコン。

BaconPage.html

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns:wicket>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
        <title>BaconPage</title>
    </head>
    <body>
        <span wicket:id="bacon">ベーコン画像</span>
    </body>
</html>

ベーコン画像をベーコンのimgタグに置き換えるのです。

BaconPage.java

package example.bacon;
import org.apache.wicket.markup.html.WebPage;

public final class BaconPage extends WebPage {
    public BaconPage() {
        add(new Bacon("bacon", "米魂"));
    }
}

カスタムコンポーネントを利用するPageクラスです。
ベーコンはアメリカの魂であるという強い意志がうかがえます。

実行結果


おなかがすきました。