2010-07-11 30 views
1

我有這個JSP在那裏我把一些值從屬性的JavaScript數組......它看起來就像這樣:Struts2的評估,如果屬性存在,或者其長度

<s:iterator value="parts" status="status"> 
    parts[<s:property value="category.categoryId" />][<s:property value="piezaId" />] = ['<s:property value="descripcion" />', '<s:property value="disponible" />']; 
</s:iterator> 

但有時無類別設置好的該部分看起來

parts[1][460] = ['Vidrio Delantero RH', '1']; 
parts[1][463] = ['Vidrio trasero LH', '1']; 
parts[1][465] = ['Vidrio Trasero principal', '1']; 
parts[1][462] = ['Vidrio trasero RH', '1']; 
parts[][512] = ['Volanta', '1']; 
parts[10][599] = ['Z de gu&iacute;a', '1']; 
parts[1][692] = ['Farol de bumper delantero LH', '1']; 

,並打破了JavaScript的,因爲看起來像parts[][512]

在Struts1的,我有功能的部分logic:present,即時尋找的東西當量/在Struts2相似......試過<s:if test="#category.categoryId.length() > 0">但它從來沒有涉及到真正的...

任何幫助將不勝感激...

回答

4

你的空值對應於category.categoryId這是一個空字符串?或者是一個空值?如果第一個,那麼我會嘗試<s:if test="category.categoryId.length() != 0">或在您的category<s:if test="category.categoryIdNonEmpty">中添加布爾方法。

我寧願儘量避免使用struts標籤的複雜邏輯,並將其委託給該操作。例如,我會考慮一個額外的方法(例如,partsWithId()替代getParts()),它會過濾掉帶有空類別ID的部分,然後致電<s:iterator value="partsWithId">

+0

我試圖避免新的方法...無論如何,我放棄,並與阿賈克斯做... – 2010-07-11 20:12:21

+0

無論如何,我在struts中尋找一個等價的方法來評估是否存在任何屬性,並且它具有值... – 2010-07-13 04:16:11

1

我不知道很多關於Struts2的,但經過短暫的觀察,我認爲你可能需要做更類似的事情:<s:if test="%{#category.categoryId.length() > 0}">

你有一個類別0?如果沒有,這是另一個選項......這絕對是一個黑客攻擊,但它應該防止js代碼被破壞。未分類的東西會在類別最終0

<s:iterator value="parts" status="status"> 
    parts[0<s:property value="category.categoryId" />][<s:property value="piezaId" />] = ['<s:property value="descripcion" />', '<s:property value="disponible" />']; 
</s:iterator> 
+0

謝謝,在您的好建議後,數組在訪問時未定義。因爲它的目的是填補另一個multiselect我採取了一個額外的阿賈克斯調用這樣做的好方法.. – 2010-07-11 20:13:32