次のようなプロファイルを持つプロパティがあります。
public List<List<String>> getAvailablePassengersJS()
外側のリストの要素ごとに 1 行、内側のリストの最初の 5 つの位置ごとに 1 つの列を持つテーブルを作成したいと考えています。私はこれを使ってみました:
<s:iterator value="ssn.docked.AvailablePassengersJS" var="line">
<tr>
<td><s:property value="line[0]"/></td>
<td><s:property value="line[1]"/></td>
<td><s:property value="line[2]"/></td>
<td><s:property value="line[3]"/></td>
<td><s:property value="line[4]"/></td>
</tr>
</s:iterator>
ただし、出力は 100 行以上の完全に空白の列です。
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
データが正しく入力されていることはわかっています。私がこれを行うとき:
<s:iterator value="ssn.docked.AvailablePassengersJS" var="line">
<tr>
<td><s:property/></td>
</tr>
</s:iterator>
次のような100行以上を取得します。
<tr>
<td>[2236, Middle, Onbenbosin Bawed, true, You can book Tritho Fonand]</td>
</tr>
そして、私がこれを行うとき:
<s:iterator value="ssn.docked.AvailablePassengersJS" var="line">
<tr>
<td><s:property value="line"/></td>
</tr>
</s:iterator>
例外があります:
java.lang.ClassCastException: java.util.ArrayList incompatible with java.lang.String
したがって、「行」が ArrayList に解決されることはわかっています。私が OGNL について読んだことはすべて、[] 表記法を使用して配列にインデックスを付けることができるはずであることを暗示しているようです。{}、# などのより多くの組み合わせを試してみましたが、無駄に負担をかけることはありません。これが機能しない理由と、機能させるために何をする必要があるかを誰かが説明できますか?
アップデート
以下のクォータニオンの提案を試して、このコードを使用しました:
<s:iterator value="ssn.docked.AvailablePassengersJS" var="line">
<tr id="availPass<s:property value="#line[0]"/>">
<td><s:property value="#line[1]"/></td>
<td><s:property value="#line[2]"/></td>
<td><s:checkbox key="#line[3]" value="false" theme="simple"/> Book</td>
</tr>
</s:iterator>
それは主に動作します。残念ながら、チェックボックスでは失敗します:
<tr id="availPass151570">
<td>Low</td>
<td>Andadicko Ostan</td>
<td><input type="checkbox" name="#line[3]" value="true" id="#line_3_"/><input type="hidden" id="__checkbox_#line_3_" name="__checkbox_#line[3]" value="true" /> Book</td>
</tr>
キーを使用しない場合、id または値の組み合わせも機能しません。名前とIDの両方だけの場合:
<td><s:checkbox name="#line[3]" id="#line[3]" value="false" theme="simple"/> Book</td>
解決しない場合:
<td><input type="checkbox" name="Book" value="true" id="#line3"/><input type="hidden" id="__checkbox_#line3" name="__checkbox_Book" value="true" /></td>
名前だけを使用する場合:
<td><s:checkbox name="#line[3]" value="false" theme="simple"/> Book</td>
どちらも機能しません:
<td><input type="checkbox" name="#line[3]" value="true" id="#line_3_"/><input type="hidden" id="__checkbox_#line_3_" name="__checkbox_#line[3]" value="true" /> Book</td>
id だけを使用すると、内部エラーが発生します。
<td><s:checkbox id="#line[3]" value="false" theme="simple"/> Book</td>
<td><input type="checkbox" name="<!-- FREEMARKER ERROR MESSAGE STARTS HERE -->...
Expression parameters.name is undefined on line 23, column 32 in template/simple/checkbox.ftl.
The problematic instruction:
----------
==> ${parameters.name?html} [on line 23, column 30 in template/simple/checkbox.ftl]
チェックボックスのパラメータがプロパティとは異なる構文を必要とするのはなぜですか?