わかりましたので、JSPタグを(tagfile経由で)作成しようとしています。クライアント側で行を追加できる「追加」ボタンが付いたテーブルを作成できます。基本的に、行の HTML をこのタグに渡すと、その行を含むテーブルが作成され、その行をテーブルに動的に挿入するための JS も出力されます。また、単純にテーブルのヘッダーになる行も渡します。
<%@ tag language="java" pageEncoding="ISO-8859-1"%>
<%@ taglib uri='http://java.sun.com/jsp/jstl/core' prefix='c' %>
<%@ taglib uri='http://java.sun.com/jsp/jstl/functions' prefix='fn' %>
<%@ taglib uri='http://java.sun.com/jsp/jstl/xml' prefix='x' %>
<%@ attribute name = "id" required = "true"%>
<jsp:doBody var = "thebody"/>
<x:parse doc='${"<root>"}${thebody}${"</root>"}' var = "xmlBody"/>
<table id = "${id}" class = "datatable">
<tbody>
<tr>
<x:forEach select="$xmlBody/root/th/*" var="data">
<td><x:out select="$data"/></td>
</x:forEach>
</tr>
<tr>
<x:forEach select="$xmlBody/root/tr/*" var="data">
<td><x:out select="$data"/></td>
</x:forEach>
</tr>
<c:out value="${heading}"/>
</tbody>
</table>
<button id="addRowButton" class="BUTTON btndarkblue " title="Add" onclick="addRowTo${id}()"> Add </button>
<script>
function addRowTo${id}()
{
$('#${id} tr:last').after('<tr><x:forEach select="$xmlBody/root/tr/*" var="data"><td><x:out select="$data"/></td></x:forEach></tr>');
}
</script>
タグに単純なテキストが含まれている場合、これは完全に機能します。しかし、いくつかの html を (直接または他のカスタム jsp タグを介して) 渡すと、それらのタグの TEXT のみが出力され、タグ自体は出力されません。例えば:
<button onclick = "doSomething()">Click here</button>
になる
Click Here
私はそれが何をしているのか、タグが非リーフノードに適用されると、そのチェーンの下にあるリーフノードのデータのみを出力すると信じています...
それで、誰かがこれに対する回避策を持っていますか?ノードをそのまま出力するにはどうすればよいですか?
PS: c:out も試しましたが、html が TEXT ( $lt;tr $gt; ...) として出力されました。