-2

我有一个配置文件如下的属性:

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"/>&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 或 value 的组合也不起作用。如果我只是名字和身份证:

<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]

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

4

2 回答 2

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>
于 2012-04-11T17:01:06.500 回答
0

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

<input type="checkbox" name="%{#line_3_[1]}" value="true" id="%{#line_3_[1]}"/>
于 2014-11-19T17:53:32.877 回答