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

时间:2013-08-13 13:36:27

标签: 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>

如果我像在哪里(i == 3)对属性进行硬编码,那么它可以正常工作。按预期渲染。

但是,通过尝试动态解析字符串(i <> 3),每次字符串var "html"都是null。不可否认,我的JavaScript充其量只是平均水平。我确定这是一个简单的解决办法,但是如果我能弄明白的话,那就太过分了!

P.S。关于我为什么要走这条路的故事很长,我会饶有你的故事(欢迎你)。我只是想知道为什么变量propertyArray[i]不起作用。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

propertyArray[i] 正在工作;它的 rest 不是(也不会)。

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

但是,在这种情况下,最好只渲染从Ajax请求返回的HTML,具体取决于您真正想要做的事情,或者在JSP(而不是JS)中创建所有HTML等。 / p>