我有一个配置文件如下的属性:
public List<List<String>> getAvailablePassengersJS()
我希望为外部列表中的每个元素创建一个表,为内部列表中的前五个位置中的每一个创建一个列。我尝试使用这个:
<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 或 value 的组合也不起作用。如果我只是名字和身份证:
<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]
为什么复选框的参数需要与属性不同的语法?