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", "米魂")); } }