2013-04-22 140 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