这是我的问题:
我在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"> <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;"> ';
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"> <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]
不起作用。
答案 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>