我有这样的一个配置文件的属性:如何在OGNL/Struts2中迭代和索引列表列表?
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。 Everything I've read about OGNL似乎暗示我应该能够通过[]符号索引数组。我尝试了更多的{},#等组合,以免我无法承受。 任何人都可以解释为什么这不起作用,我需要做些什么才能使它工作?
UPDATE
尝试四元数的建议,下面我用这个代码:
<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]
为什么复选框的参数需要与属性不同的语法?
我不能告诉问什么,如果((试过) - (生产) - (但需要)澄清问题,将反向投票)。所需要的是缺少一个大标签汤。 – Quaternion 2012-04-14 02:51:58
四元数没有提及来回询问他删除的信息的长线程,这使得在上述状态中留下了问题......我的结论是,如果某个名声在前4%的人不能简洁地回答简单的问题对于已经在该领域工作了25年的人来说,那么该技术还没有准备好迎接黄金时段。我会坚持使用Struts-1,直到Struts-2能够适应我的需求(而不是让我的需求适应Struts-2)。 – 2012-05-01 17:21:55
你有没有做过什么来改善这个问题?你没有做任何复杂的事情,我确信任何你想要的东西都可以很容易地回答/完成。我已经解释过:struts2复选框的工作原理与迭代的工作方式无关。我花时间回答了原来的问题,然后问题发生了变化。这就像我问一个java for-each循环如何工作,然后生气,它不能解释我的嵌套printf函数。其他struts2的答案会读这个,并认为,这是没有意义的。如果你问错误的问题,就问另一个问题,问题也是免费的。 – Quaternion 2012-05-02 01:23:17