2012-01-07 63 views
0

我有一个jsp页面,我在其中使用logic:iterate迭代集合,并且每个项目都显示一个html:form。 这可以工作,但每次我提交这些表单之一并重新加载页面时,所有其余表单都会填充上次插入的值。 可能有些东西仍然在会话中,因为表单都是相同的类型,它们都被预填充。Struts - 在<逻辑:迭代>中提交<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

我猜输入字段name属性在使用逻辑和html taglibs时没有正确的前缀。尝试使用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" ...

我建议您始终使用嵌套的标签库作为逻辑和HTML标记库的替代品。

0

这看起来不像logic:iterate的问题。看看你的问题描述,它看起来像你使用相同的表单bean的所有映射。

检查struts-config.xml以查看动作映射中使用的表单bean的范围是否为“session”。

如果它是“会话”,那么你需要重置表单bean的那些属性,这些属性不需要预先填充到其他正在转发的页面中。

如果表单bean中的特定属性未被重置,则由于表单bean被保存在“会话”中,该属性的会话缓存值将用于结果页面上。

相关问题