2012-04-11 60 views
-2

我有这样的一个配置文件的属性:如何在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"/>&nbsp;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" />&nbsp;Book</td> 
</tr> 

如果我不使用密钥,id或值的任何组合都不起作用。 如果我只是双方的名称和ID:

<td><s:checkbox name="#line[3]" id="#line[3]" value="false" theme="simple"/>&nbsp;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"/>&nbsp;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" />&nbsp;Book</td> 

如果我只是用id,我得到一些内部错误:

<td><s:checkbox id="#line[3]" value="false" theme="simple"/>&nbsp;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] 

为什么复选框的参数需要与属性不同的语法?

+0

我不能告诉问什么,如果((试过) - (生产) - (但需要)澄清问题,将反向投票)。所需要的是缺少一个大标签汤。 – Quaternion 2012-04-14 02:51:58

+0

四元数没有提及来回询问他删除的信息的长线程,这使得在上述状态中留下了问题......我的结论是,如果某个名声在前4%的人不能简洁地回答简单的问题对于已经在该领域工作了25年的人来说,那么该技术还没有准备好迎接黄金时段。我会坚持使用Struts-1,直到Struts-2能够适应我的需求(而不是让我的需求适应Struts-2)。 – 2012-05-01 17:21:55

+0

你有没有做过什么来改善这个问题?你没有做任何复杂的事情,我确信任何你想要的东西都可以很容易地回答/完成。我已经解释过:struts2复选框的工作原理与迭代的工作方式无关。我花时间回答了原来的问题,然后问题发生了变化。这就像我问一个java for-each循环如何工作,然后生气,它不能解释我的嵌套printf函数。其他struts2的答案会读这个,并认为,这是没有意义的。如果你问错误的问题,就问另一个问题,问题也是免费的。 – Quaternion 2012-05-02 01:23:17

回答

1
private List<List<String>> listOfLists; 

public List<List<String>> getListOfLists() { 
    return listOfLists; 
} 

public void setListOfLists(List<List<String>> listOfLists) { 
    this.listOfLists = listOfLists; 
} 




    <s:iterator var="list" value="%{listOfLists}"> 
     <s:iterator var="list" value="#list" status="stat"> 
       <s:property value="#list[#stat.index]"/> //by index. 
     </s:iterator><br/> 
    </s:iterator> 
+0

感谢您的回复,但我不想遍历内部列表。我想索引它。你的函数运行,并显示所有的值。但它不会给我所要求的。我想索引到内部列表中,以便我可以提取具体的值。一些将用于ID,其他用于显示,其他用于悬停消息。 – 2012-04-11 17:47:04

+0

你想通过索引访问内部列表吗? – 2012-04-11 18:18:26

0

这是一个老问题,但对于其他人,你需要使用%{listname[index]}"的复选框例如

<input type="checkbox" name="%{#line_3_[1]}" value="true" id="%{#line_3_[1]}"/>