2016-04-28 60 views
0

我正在使用Struts 2.1.6。我在尝试使用<s:iterator>标记中的onchange事件来设置属性的值时遇到问题。Struts2迭代器标签onchange问​​题

<s:iterator value="myList" status="rowStatus">  
<tr> 
    <td><s:textfield name="myList[%{#rowStatus.index}].abc" value="%{model[#rowStatus.index].abc}" onchange="myList[%{#rowStatus.index}].changeFlag = "true"/></td> 
    <td><s:textfield name="myList[%{#rowStatus.index}].changeFlag" value="%{model[#rowStatus.index].changeFlag}" /></td> 
</tr> 
</s:iterator> 

列表myList有多个对象,如果有变化,以任何特定行的abc属性的值,那么我想设置changeFlag到真正的价值。但它不起作用。

怎么办?

回答

0

s:textfield标签的onchange属性是

设置HTML呈现的HTML元素

和呈现的HTML元素的onchange属性是<input type="text">。对于此元素,onchange属性定义了一个用于处理事件的JavaScript函数。所以你可以创建一个功能doChange()。但是,你需要添加id属性

HTML id属性

这允许通过id找到文档中的元素之前。

<s:iterator value="myList" status="rowStatus">  
<tr> 
    <td><s:textfield id="myList[%{#rowStatus.index}].abc" name="myList[%{#rowStatus.index}].abc" value="%{model[#rowStatus.index].abc}" onchange="doChange('myList[%{#rowStatus.index}].changeFlag')"/></td> 
    <td><s:textfield id="myList[%{#rowStatus.index}].changeFlag" name="myList[%{#rowStatus.index}].changeFlag" value="%{model[#rowStatus.index].changeFlag}" /></td> 
</tr> 
</s:iterator> 
<script> 
function doChange(dest) { 
document.getElementById(dest).value = 'true'; 
} 
</script> 

P.S:您正在使用Struts的版本太旧(2.1.6)。你应该知道如何获得更新的版本。见How to know a version of Struts 2

+0

非常感谢罗马!这工作! – bipin