例えば「戻る」ボタンを押したときにユーザーが前回入力していた値を表示するとか、検索ボタンを押して遷移した検索結果画面の検索文字欄にユーザーが入力した値を表示するとか、使いどころはいろいろあります。
内部ではどういう動きをしているのか気になったので、ソースを読んでみました。
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 件のコメント:
コメントを投稿