发疯前的一个例子:
给定的代码太复杂了,所以我创建了一个 bean 用于测试目的:
package fr.hbonjour.formulaires.actions;
public class PlaceBean {
private String name;
private String adress;
private Long index;
public PlaceBean()
{
this(null, null, null);
}
public PlaceBean(Long id, String name, String adress)
{
this.setName(name);
this.setAdress(adress);
this.setIndex(id);
}
... (getters and setters)
}
然后我尝试了这个:
<s:bean name="fr.hbonjour.formulaires.actions.PlaceBean" var="bean" />
<s:set var="bean.name" value="places[places[0].index].name" />
<!-- Prompt the name from the created bean -->
<td><s:property value="bean.name"/></td>
places[0].index 返回一个 Long 值,places[places[0].index].name 返回一个 String 值。这是我的列表的值:
0 GABRIEL
1 WU
所以 places[places[0].index].name= places[0].name = GABRIEL。确实<s:property />
标签显示GABRIEL
。
一个更棘手的例子:
<s:bean name="fr.hbonjour.formulaires.actions.PlaceBean" var="bean" />
<s:iterator status="stat" value="places">
<tr>
<s:set var="bean.name" value="places[places[#stat.index].index].name" />
<td><s:property value="bean.name"/></td>
</tr>
</s:iterator>
所以...对于 #stat.index = 0 例如,places[places[#stat.index].index].name = places[places[0].index].name = places[0].name = GABRIEL。此代码返回以下值:
GABRIEL
WU
让我们检查!
form.datiVersioneQuoteAssegnazione[form.dati.assegnazioniAnnualitaAtto[#qid].lista[#k.index].idObj].confermata
我们看到 if#k.index
是一个迭代器索引并lista[#k.index].idObj
返回一个 Long 值,lista[#k.index].idObj
有效(places[#stat.index].index
在我们的示例中有效)。
Wa 看到,如果lista[#k.index].idObj
返回一个 Long 值,则datiVersioneQuoteAssegnazione[lista[#k.index].idObj].confermata
有效(places[places[#stat.index].index].name
在我们的示例中有效)。
所以 ?
我建议您像我在示例中所做的那样逐步检查表达式的每个值。因为没有人能够准确地重新制作您的测试用例。也许您应该特别检查form.dati.assegnazioniAnnualitaAtto[#qid]
表达式的部分。我不怀疑你会设法以这种方式找到答案。
但无论如何,它太丑了。祝你好运。