2013-04-22 124 views
0

越来越可变我有一个JSP,这里的片段:Struts2的 - 从结构复杂

<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"/> 

我试图使用singlequotes或其他struts sintaxes,但我无法安排它。 我正在寻找工作语法。 感谢

+1

为什么你想让任何人看看你的JSP?这是不可维护的。 – 2013-04-22 15:09:17

+0

因为创建这个大项目的人总是这样做,我必须严格遵守他们的编码标准...... – Emaborsa 2013-04-22 15:32:05

+0

你的idObj是什么类型? “form.datiVersioneQuoteAssegnazione”中的关键字是什么? – 2013-04-22 17:10:04

回答

1

AN示例之前抵达INSANE:

给定的代码太复杂了,所以我创建了一个用于测试目的的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> 

地方[0]的.index返回一个值长和地点[地方[0]的.index]。名称的字符串值。这里是我的列表的值:

0 GABRIEL 
1 WU 

所以地方[地方[0]的.index]。名称=的地方[0]。名称= 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例如,地点[地方[#stat.index]的.index]。名称=地方[地方[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返回一个值长,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]表达式的一部分。我不怀疑你会设法找到答案。

但无论如何,它是如此丑陋。祝你好运。

+0

Magleff:研发用的+1。 – 2013-04-23 09:21:00

+0

...好吧,既然你是对的,关于复杂性,我离开了代码,因为它是,我的意思是使用tmpObj。通过这种方式,它更清晰易懂。 – Emaborsa 2013-05-02 06:55:11

0
使用 %{}

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

复制,粘贴

力OGNL评价,运行和回到这里发布的输出:

<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> 
+0

感谢您的回答,我已经尝试过,但不起作用。 'qid'是另一个变量集,'k'是迭代器的计数器。 – Emaborsa 2013-04-23 06:34:10