1

这是我的问题:

我在 JSP 中有一个 JavaScript 函数,如下所示:

<script type="text/javascript">
function generateTable()
{

    var temp = '';
    temp = temp + '<logic:iterate name="dataList" id="dto" indexId="dtoIndex" >';
    temp = temp + '<logic:equal name="dtoIndex" value="0">';
    temp = temp + '<thead>';
    temp = temp + '<tr class="topexpression7"></tr></thead><tbody></logic:equal>';
    temp = temp + '<tr>';

    var propertyArray = new Array('"title"','"jDate"','"employeeId"','"employeeName"');
    var arrayLength = propertyArray.length;

    var html = '';
    var i=0;
    for (i=0; i<arrayLength; i++)
    {   
        if (i == 2)
        {
            // left
            html = html + '<logic:present name="dto" property=' + propertyArray[i] + '><td class="left">&nbsp;<bean:write name="dto" property=' + propertyArray[i] + '/></td></logic:present>';
        }
        else if (i == 3)
        {
            // Only applies to this property
            html = html + '<logic:present name="dto" property="employeeName">';
            html = html + '<td class="left" style="white-space:nowrap;">&nbsp;';
            html = html + '<nobr><bean:write name="dto" property="employeeName"/>';
            html = html + '</nobr></td></logic:present>';
        }
        else
        {
            // center
            html = html + '<logic:present name="dto" property=' + propertyArray[i] + '><td class="center">&nbsp;<bean:write name="dto" property=' + propertyArray[i] + '/></td></logic:present>';
        }
    }
    temp = temp + html + '</logic:iterate></tbody>';

    // Write out the HTML
    document.writeln(temp);
}
</script>

如果我对 where ( i == 3) 之类的属性进行硬编码,它可以正常工作。按预期渲染。

但是通过尝试动态解析字符串( where i <> 3),字符串 var每次都是"html"null不可否认,我的 JavaScript 充其量只是平均水平。我敢肯定这很容易解决,但如果我能弄清楚,那就太糟糕了!

PS 关于我为什么要走这条路的长篇大论,我将不讲故事(不客气)。我只想知道为什么变量propertyArray[i]不起作用。

4

2 回答 2

1

JSP 在服务器上呈现,JavaScript 在客户端浏览器上呈现,但要正确呈现 JSP 标记应该格式正确,即具有有效值的所有必要属性、开始和结束标记等。但并非所有标记都是有效的。首先,您的 JSP 在服务器上编译,它无法处理错误的 JSP 标签。当i != 3你有那个糟糕的 JSP 标签时。当 JSP 被编译时,JavaScript 代码就像内容一样被使用,它对 JSP 编译器的意义不大,因为它正在查找与 JSP 语法相对应的标签。从 JSP 编译器的角度来看,您会看到logic:present标记具有属性property但没有值,因为propertyArray[i]不作为 JSP 表达式求值,它只是打破了标记边界。所以标签没有正确编译。如果您将 JSP 标记放入 JavaScript 代码中,请确保它们是一致的。

于 2013-08-13T16:46:59.833 回答
0

propertyArray[i] 正在工作;它的其余部分不是(也不会)。

JSP 标签不在客户端执行;在 JavaScript 中生成的 HTML 不得包含 JSP 标记(除非您不在乎它们是否运行)。相反,JavaScript 本身必须在服务器端使用标签生成,然后才能发送到浏览器。

但是,在这种情况下,最好只呈现从 Ajax 请求返回的 HTML,这取决于您真正想要做什么,或者在 JSP(而不是 JS)中创建它等等。

于 2013-08-13T14:02:16.670 回答