我有jsp页面,我使用logic:iterate
遍历集合,并为每个项目显示html:form
。
这是有效的,但每次我提交其中一个表单并重新加载页面时,所有剩余的表单都填充了最后插入的值。
可能会有一些东西在会议中,因为表格都是相同的类型,所以它们都是预先填充的。
这是我的jsp:
<%@ page language="java"%>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
<%@taglib uri="http://struts.apache.org/tags-logic" prefix="logic"%>
<%@taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
<html>
<body>
<html:img action="/viewMedia.do?method=viewImageThumb" paramId="idImage"
paramName="image" paramProperty="idImage" />
<logic:iterate name="regions" id="region">
<p>
<html:img action="/viewMedia.do?method=viewRegion" paramId="idRegion" paramName="region" paramProperty="idRegion" />
<logic:notPresent name="region" property="person">
<html:form action="/AssignRegion.do" >
<html:text property="name" />
<html:text property="surname" />
<html:checkbox property="usedForTraining" />
<html:hidden property="idRegion" name="region" />
<html:hidden property="idImage" name="region"/>
<html:submit />
<html:cancel />
</html:form>
</logic:notPresent>
<logic:present name="region" property="person">
<bean:write name="region" property="person.name"/>
<bean:write name="region" property="person.surname"/>
</logic:present>
</p>
</logic:iterate>
</body>
</html>
我该如何避免这种情况?
答案 0 :(得分:0)
我猜输入字段名称属性在使用逻辑和html标记库时未正确加前缀。请尝试使用nested taglib代替
<%@taglib uri="http://struts.apache.org/tags-nested" prefix="nested"%>
...
<nested:iterate ...
...
<nested:form ...
<nested:text ..
如果您查看生成的HTML,则通常会看到<input name="regions[0].name" ...
而不是<input name="name" ...
我建议始终使用嵌套的taglib替代逻辑和html标记库。
答案 1 :(得分:0)
logic:iterate
看起来不像问题。查看您的问题描述,看起来您正在为所有映射使用相同的表单bean。
检查struts-config.xml
以查看动作映射中使用的表单bean的范围是否为“session”。
如果是“session”,则需要重置表单bean的那些属性,这些属性不需要在转发到的其他页面中预先填充。
如果未重置表单bean中的特定属性,则将在结果页面上使用该属性的会话缓存值,因为表单bean保存在“session”中。