Struts - отправить <html: form> в <logic: iterate> - PullRequest
0 голосов
/ 07 января 2012

У меня есть страница 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>

Как мне избежать этого?

Ответы [ 2 ]

0 голосов
/ 16 сентября 2013

Это не похоже на проблему с logic:iterate. Глядя на описание вашей проблемы, похоже, что вы используете один и тот же компонент формы для всех отображений.

Проверьте struts-config.xml, чтобы увидеть, является ли область действия компонента формы, используемого в сопоставлениях действий, "сессией".

Если это «сессия», вам нужно сбросить те свойства компонента формы, которые не требуют предварительного заполнения на других пересылаемых страницах.

Если определенное свойство в компоненте формы не сбрасывается, кэшированное значение сеанса этого свойства будет использоваться на результирующих страницах, поскольку компонент формы содержится в «сеансе».

0 голосов
/ 07 января 2012

Я полагаю, что атрибут имени поля ввода имеет префикс при использовании логики и тегов HTML. Попробуйте использовать вложенный 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 taglibs.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...