ブラウザでページ ソースを表示すると、作成しているものは次のようになります (${row.content} はサーバー上で既に置き換えられていることに注意してください)。
<td>0<td>
<td>
<div id="content" style="table-layout:fixed; width:405px; word-wrap:break-word;">
<script language="JavaScript" type="text/JavaScript">
function load(){
var content='The first row content';
document.getElementById("content").innerHTML=content;
document.getElementById("content").innerHTML=
Utf8.decode(document.getElementById("content").innerHTML);
}
window.onload=load;
</script>
</div>
</td>
<td>1<td>
<td>
<div id="content" style="table-layout:fixed; width:405px; word-wrap:break-word;">
<script language="JavaScript" type="text/JavaScript">
function load(){
var content='Some different content';
document.getElementById("content").innerHTML=content;
document.getElementById("content").innerHTML=
Utf8.decode(document.getElementById("content").innerHTML);
}
window.onload=load;
</script>
</div>
</td>
<td>2<td>
<td>
<div id="content" style="table-layout:fixed; width:405px; word-wrap:break-word;">
<script language="JavaScript" type="text/JavaScript">
function load(){
var content='Yet some more content';
document.getElementById("content").innerHTML=content;
document.getElementById("content").innerHTML=
Utf8.decode(document.getElementById("content").innerHTML);
}
window.onload=load;
</script>
</div>
</td>
のコピーがfunction load()
何度もwindow.onload
割り当てられます。window.onload=load;
これがブラウザに到着して解釈されると、 の最後の定義のみfunction load()
が有効になります。最後に割り当てたときだけが意味window.onload=load;
を持ちます(window.onloadの値を置き換え続けるため)-再定義するたびload()
に前の定義が置き換えられるため、最後の var content='${row.content}';
ものだけが実行されます。
さらに、<div>
「コンテンツ」という同じ ID のタグが多数あることになりますが、これは許可されていません。
これらの各ブロックのコンテンツは<td><div>...</div></td>
、サーバー上の JSP/JSTL 自体によって設定できます。javascript を介して innerHTML を設定する必要はありません。totalRow
最初の数を提供するために設定した varStatus を使用でき<td>
ます。独自のカウンターをインクリメントする必要はありません。
式言語 (EL) を使用して、各行のコンテンツ値にアクセスできます。
Inline style="blah blah blah" は最悪です。絶対に必要な場合にのみ使用してください。
代わりに、このスタイルをすべて .contentbits:
style="table-layout:fixed; width:405px; word-wrap:break-word;"を対象とする CSS に入れます。
になる
.contentbits {
table-layout:fixed;
width:405px;
word-wrap:break-word;
}
ページ フラグメントは非常に単純になります。
<c:forEach var="row" items="${tAdmin.rows}" varStatus="totalRow" step="1">
<td>${totalRow}</td>
<td>
<div class="contentbits">${row.content}</div>
</td>
</c:forEach>