0

我有一个 JSP,这里是片段:

<s:set var="tmpIdObj"
       value="form.dati.assegnazioniAnnualitaAtto[#qid].lista[#k.index].idObj"/>

<s:set var="c6" 
       value="form.datiVersioneQuoteAssegnazione[#tmpIdObj].confermata"/>

我想写在一行中,避免创建 tmpIdObj 变量,如下所示:

<s:set var="c6"
       value="form.datiVersioneQuoteAssegnazione[form.dati.assegnazioniAnnualitaAtto[#qid].lista[#k.index].idObj].confermata"/>

我尝试使用单引号或其他 struts sintaxes,但我无法安排它。我正在寻找有效的语法。谢谢

4

2 回答 2

1

发疯前的一个例子:

给定的代码太复杂了,所以我创建了一个 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]表达式的部分。我不怀疑你会设法以这种方式找到答案。

但无论如何,它太丑了。祝你好运。

于 2013-04-23T08:27:17.787 回答
0

通过使用强制 OGNL 评估%{}

<s:set var="c6"
       value="form.datiVersioneQuoteAssegnazione[%{form.dati.assegnazioniAnnualitaAtto[#qid].lista[#k.index].idObj}].confermata"/>

复制、粘贴、运行并返回此处发布输出:

  <div style="border: 5px solid red; width: 100%;">

    form.dati.assegnazioniAnnualitaAtto[#qid].lista[#k.index].idObj: [
    <s:property value="form.dati.assegnazioniAnnualitaAtto[#qid].lista[#k.index].idObj" />]

    form.datiVersioneQuoteAssegnazione[%{form.dati.assegnazioniAnnualitaAtto[#qid].lista[#k.index].idObj}].confermata: [
    <s:property value="form.datiVersioneQuoteAssegnazione[%{form.dati.assegnazioniAnnualitaAtto[#qid].lista[#k.index].idObj}].confermata" />]

    form.datiVersioneQuoteAssegnazione[form.dati.assegnazioniAnnualitaAtto[%{#qid}].lista[%{#k.index}].idObj].confermata: [
    <s:property value="form.datiVersioneQuoteAssegnazione[form.dati.assegnazioniAnnualitaAtto[%{#qid}].lista[%{#k.index}].idObj].confermata" />]

  </div>
于 2013-04-22T16:05:50.350 回答