Struts2 - 从复杂的结构中获取变量

时间:2013-04-22 14:44:18

标签: variables struts2

我有一个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,但我无法安排它。 我正在寻找工作语法。 感谢

2 个答案:

答案 0 :(得分: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 [0] .index] .name设置为String值。以下是我的列表的值:

0   GABRIEL
1   WU

所以放置[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

我们看到,如果#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在我们的示例中有用)。

SO?

我建议你像我在我的例子中一样逐步检查表达式的每个值。因为没有人能够完全重新制作你的测试用例。也许你应该特别检查表达式的form.dati.assegnazioniAnnualitaAtto[#qid]部分。我不怀疑你会设法找到答案。

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

答案 1 :(得分: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>