簡體   English   中英

使用jstl c:forEach在迭代jsp bean上創建javascript json對象

[英]Create javascript json object on iteration jsp bean using jstl c:forEach

我有兩個java類

public class Abc{
   private List<SomeOtherClass> someClass;
   private String k;
   private String m;
}

public class SomeOtherClass{
   private String a;
   private String b;
   private String c;

}

我有一個jsp頁面,在其中創建Abc類的bean

<jsp:useBean id="someId" class="Abc" scope="request" />

現在在這個jsp中,並在一個腳本標簽中,我試圖創建一個json對象的javascript數組

<script>
 var abc = (function(){
     module._myFunction = {
             "key1" :"<c:out value = '${someId.k}'/>",
             "key2" :{
                      <c:forEach varStatus='status' items='${someId.someClass}' var ="xyz">
                          "subKey1":"${xyz.a}",
                          "subKey2":${xyz.b}
                      </c:forEach>
                    }
              }
}(abc || {}))

</script>

但是由於c:forEach循環中的代碼,此代碼段引發了“意外字符串”錯誤。 但是,如果我省略了subkey1和subKey2,它工作正常。 我也認為這是預期的。 有什么辦法可以創建這個json數組。 當我檢查abc.key1是開發人員工具時,它給出了正確的價值。 有什么辦法可以創建這個json數組並檢查

abc.key2.subkey1 or abc.key2.subKey2  in developer console 

如果列表中有3個項目,並且您要擴展代碼的這一部分:

"key2" :{
    <c:forEach varStatus='status' items='${someId.someClass}' var ="xyz">
        "subKey1":"${xyz.a}",
        "subKey2":${xyz.b}
    </c:forEach>
}

它看起來像:

"key2" :{
        "subKey1":"a",
        "subKey2":b
        "subKey1":"1",
        "subKey2":2
        "subKey1":"y",
        "subKey2":z
}

這不是有效格式化的json數組。 (有關有效JSON數組的快速示例,請參見此處: http : //www.w3schools.com/json/json_syntax.asp-向下滾動到“ JSON Arrays”)

您希望它看起來像是:

"key2" :[
        {
             "subKey1":"a",
             "subKey2":"b"
        },
        {
            "subKey1":"1",
            "subKey2":"2"
        },
        {
            "subKey1":"y",
            "subKey2":"z"
        }
 ]

因此,您需要在每個元素周圍加上大括號,如果不是最后一個元素,則需要在大括號后面加上一個逗號,並用括號將整個內容括起來。 這是您要執行的操作:

"key2" : [
    <c:forEach varStatus='status' items='${someId.someClass}' var ="xyz">
        {
            "subKey1":"${xyz.a}",
            "subKey2":"${xyz.b}"
        }<c:if test="${!status.last}">,</c:if>
    </c:forEach>
]

注意:我沒有對此進行測試,以確保我的示例沒有錯別字,因此,如果您遇到任何錯誤,請告訴我,我將告訴您如何解決。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM