繁体   English   中英

Struts-提交 <html:form> 内 <logic:iterate>

[英]Struts - Submit <html:form> within <logic:iterate>

我有一个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>

如何避免这种情况?

看起来似乎不是logic:iterate问题logic:iterate 查看您的问题描述,似乎您对所有映射都使用相同的Form Bean。

检查struts-config.xml以查看动作映射中使用的form Bean的范围是否为“会话”。

如果它是“会话”,那么您需要重置那些不需要在要转发到的其他页面中预先填充的form Bean的属性。

如果未重置Form Bean中的特定属性,则该属性的会话缓存值将在结果页面上使用,因为Form Bean被保存在“会话”中。

我猜想在使用逻辑和html标签库时,输入字段的name属性未正确添加前缀。 尝试改用嵌套的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 taglib。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM