0

我正在尝试使用 Javascript 从 JSON 文件生成数据表,但由于bean:write标签而遇到困难。bean:正在被删除,所以似乎只是被<write name="offenderCountVO" property="addressCount"/>解析了。这种方法是否可行?

从生成表格的页面:

        // Build profile section from JSON file
        $.getJSON('<%=request.getContextPath()%>/jsp/json/offenderProfileJSON.jsp', function(data) {

            //alert('loading JSON');

            var items = [];
            var table = $('<table class="profile"><\/table>');
            var profileCols = 2;
            var td = "";

            // Build array of profile categories   
            for (i = 0; i < data.length; i++) {
                //alert("building items");

                // Check if this category can be displayed in this module
                var item = data[i];
                var modules = item["modules"];

                //alert("Start check");
                if (modules.indexOf(appName) > 0) {
                    // This category should be displayed
                    //alert ("Passed");
                    var label = item["label"];                  
                    var link = item["link"];
                    var name = item["name"];
                    var property = item["property"];

                    newCategory = { label: label, modules: modules, link: link, name: name, property: property };

                    items.push(newCategory);
                }
            }

            // Alphabetically sort categories by label

            //alert(items.length);
            for (i = 0; i < items.length; i++) {

                html =  '<tr><td><a href="<%=request.getContextPath()%>/' + items[i].link + '">' 
                        + items[i].label + '</a></td><td>\u003Cbean\u003Awrite name="' 
                        + items[i].name + '" property="' + items[i].property + '" /\u003E</td></tr>';       


            }

            $("#testArea").html(html);

            //table.appendTo("#testArea");

            alert("Done");

        }).error(function() {
            $("#testArea").html('<span class="error">Error parsing JSON.</span>');
        });

JSON 文件:

[
{
    "label"     :   "Address",
    "modules"   :   "AGNT,BOOKING,DIO,OMP,OTA",
    "link"      :   "offenderAddress.do?method=list",
    "name"      :   "offenderCountVO",
    "property"  :   "addressCount"
},
{
    "label"     :   "Assessments",
    "modules"   :   "AGNT,BOPP,OMP,OTA",
    "link"      :   "offenderAssessmentList.do?method=list",
    "name"      :   "offenderCountVO",
    "property"  :   "assessmentCount"
}       

]

我希望我已经很好地解释了这个问题——我正在从事几个不同的项目,现在我的头脑在旋转,所以如果你需要任何澄清,请告诉我。任何指导将不胜感激。

4

1 回答 1

1

<bean:write>是服务器端 JSP 在创建初始页面时理解的标记。

使用:

'<td>\u003Cbean\u003Awrite name="'+ items[i].name + '" property="' + items[i].property + '" /\u003E</td>'

from JavaScript 没有任何意义,因为在其页面 DOM 中包含结果<bean:write>标记的 Web 浏览器对 Java 或 bean 标记一无所知。当浏览器的 HTML 解析器看到<bean:write>它时,它只会认为“这是一些write我不知道的标签,拼写很有趣”,而不是“我最好询问服务器端该 bean 的属性的值是什么”。

如果希望浏览器看到变量的服务器端值,则必须在对浏览器的 JSON 响应中返回该值本身,而不仅仅是对基于 bean 的服务器端有意义的名称和值对。

另请注意,将未转义的字符串放入 HTML 标记是危险的。如果没有 HTML 转义,当任何项目值可能包含用户提交的值时,就会存在跨站点脚本安全漏洞。使用 DOM 属性方法来设置元素文本和属性值,而不是尝试从 JavaScript 创建 HTML 标记字符串。例如:

<input type="hidden" id="contextPath" value="<c:out value="${pageContext.request.contextPath}"/>"/>
...
var cp = document.getElementById('contextPath').value;

for (var i= 0; i<items.length; i++) {
    table.append(
        $('<tr>').append(
            $('<td>').append(
                $('<a>', {href: cp+'/'+items[i].link, text: items[i].label})
            )
        ).append(
            $('<td>', {text: items[i].value_of_whichever_property_it_is})
        )
    );
}
于 2013-06-06T20:42:46.500 回答