javascript - 如何使用 Struts 中的属性名称通过 JavaScript 动态创建 HTML?

标签 javascript html arrays jsp struts

这是我的问题:

我在 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 ),它就可以正常工作。按预期呈现。

但是通过尝试动态解析字符串(其中 i <> 3 ),字符串 var "html"null每次。不可否认,我的 JavaScript 充其量只是一般水平。我确信这是一个简单的修复,但如果我能弄清楚的话那就太糟糕了!

附注至于我为什么要走这条路,说来话长,我就不再讲这个故事了(不客气)。我只是想知道为什么变量 propertyArray[i]不工作。

最佳答案

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

关于javascript - 如何使用 Struts 中的属性名称通过 JavaScript 动态创建 HTML?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18210638/

相关文章:

javascript - 悬停子项时突出显示父项

Javascript 从字符串中提取数字

javascript - 无法删除跨度输入框

javascript - 由文本触发的 onmouseout - onmouseleave(即仅)功能首选

arrays - 如何解析下面格式的json数组

javascript - 如何按时间戳对数组进行排序?

arrays - 我收到错误 = 无法将类型 'String?' 的值分配给类型 '[String]' 我到处都看了,但似乎找不到答案

javascript - 将fabricjs Canvas 保存为PC上的图像

javascript - 网络 Storm 。在 watch 模式下运行 Jest

css - Div 不调整以适合图像的高度和宽度