JSPに次のようなものがあるとします:
<cic:table listBeanParm="presbeans" showSelct="false" messageType="cicProductTable">
<cic:column>
<cic:title>A column title</cic:title>
</cic:column>
</cic:table>
....
<% TableModel tableModel = (TableModel)request.getAttribute( "cic.table.model"); %>
//tableModel used here
それに関連付けられたコードでcic:table
、属性「cic.table.model」が設定されていることがわかります(障害:表示するには逆コンパイルする必要があります...ソースがありません)。
public int doEndTag() throws JspException {
/* 47*/ request.setAttribute("cic.table.model", tableModel);
/* 48*/ init();
/* 49*/ return super.doEndTag();
}
そして、型階層は次のようになります。
cicTable extends cicComponent
cicComponent extends BodyTagSupport
(cicComponent runs pageContext.getOut(), and we do not have a page!)
それでも、私はこのようないくつかのバリエーション (doStartTag、doEndTag) を試しましたが、私の呼び出しはコンパイルされたクラス内の null ポインターで常に失敗します:
System.out.println("type:" + request.getAttribute("presbeans").getClass().getName());
cicTable aTable = new cicTable();
aTable.setListBeanParam("presbeans");
aTable.setShowSelect("false");
aTable.setMessageType("cicProductTable");
//int result = Integer.MAX_VALUE;
//try {result = aTable.doStartTag();} catch (Exception e) {System.out.println("doStartTag bombed: " + e.getMessage());}
//System.out.println("doStartTag returned " + result);
int result2 = Integer.MAX_VALUE;
result2 = Integer.MAX_VALUE;
try {result2 = aTable.doEndTag();} catch (Exception e) {System.out.println("doEndTag bombed: " + e.getMessage());}
// Always a null pointer on the line above
System.out.println("doEndTag returned " + result2);
TableModel tableModel = (TableModel)request.getAttribute( "cic.table.model");
私がやりたいことは、JSP ページの taglibs で行われていることを、サーブレットで実行されるコードに変換する方法を見つけることです。 taglib のものをサーブレットで実行するための標準的なクックブックの方法はありますか?