例えば「戻る」ボタンを押したときにユーザーが前回入力していた値を表示するとか、検索ボタンを押して遷移した検索結果画面の検索文字欄にユーザーが入力した値を表示するとか、使いどころはいろいろあります。
内部ではどういう動きをしているのか気になったので、ソースを読んでみました。
org.apache.struts.taglib.html.BaseFieldTagクラスの以下のメソッドでinputタグを作っています。
protected String renderInputElement()
throws JspException {
StringBuffer results = new StringBuffer("<input");
prepareAttribute(results, "type", this.type);
prepareAttribute(results, "name", prepareName());
prepareAttribute(results, "accesskey", getAccesskey());
prepareAttribute(results, "accept", getAccept());
prepareAttribute(results, "maxlength", getMaxlength());
prepareAttribute(results, "size", getCols());
prepareAttribute(results, "tabindex", getTabindex());
prepareValue(results);
results.append(this.prepareEventHandlers());
results.append(this.prepareStyles());
if (!isXhtml()) {
prepareAttribute(results, "autocomplete", getAutocomplete());
}
prepareOtherAttributes(results);
results.append(this.getElementClose());
return results.toString();
}
value要素を生成しているのは、prepareValueの部分です。
protected void prepareValue(StringBuffer results)
throws JspException {
results.append(" value=\"");
if (value != null) {
results.append(this.formatValue(value));
} else if (redisplay || !"password".equals(type)) {
Object value =
TagUtils.getInstance().lookup(pageContext, name, property, null);
results.append(this.formatValue(value));
}
results.append('"');
}
TagUtils#lookup()を使って指定された名前のBeanの指定されたプロパティ値を取り出しています。なるほど。いやそれにしても、フレームワークのソース読むのはなかなか楽しいですね。競技プログラミングとはまた違った楽しみがあります。
0 件のコメント:
コメントを投稿