Скрытое поле весной MVC - PullRequest
       2

Скрытое поле весной MVC

11 голосов
/ 30 сентября 2011

Я хотел использовать скрытый тег весны в коде ниже.Возможно ли это в приведенном ниже коде, что я должен написать в моем контроллере, чтобы сделать это, или то, что я делаю, правильно.

<c:forEach var="record" items="${records}">
    <tr>
        <td>
            <form:form id="myForm" action="list.html" method="post">
                <input type="hidden" name="record" value="${record}" />
                <a href="#" onclick="document.getElementById('myForm').submit();">Submit</a> 
            </form:form>
        </td>
    </tr>
 </c:forEach>

Любая помощь будет высоко оценена.

Спасибо

Ответы [ 3 ]

14 голосов
/ 30 сентября 2011

Вы находитесь на правильном пути [в зависимости от того, что является вашим компонентом поддержки], но для того, чтобы связать идентификатор как скрытое поле при отправке автоматически с компонентом "Person" (в этом примере) , вы бы сделали что-то вроде:

<c:forEach var="person" items="${persons}" varStatus="status">
    <tr>
        <c:set var="personFormId" value="person${status.index}"/>
        ....
        <form id="${personFormId}" action="${deleteUrl}" method="POST">
            <input id="id" name="id" type="hidden" value="${person.id}"/>
        </form>

        <td>${person.firstName}</td>
        <td>${person.lastName}</td>
        .... 
    </tr>
</c:forEach>

Если вы хотите отобразить скрытое поле, вы должны использовать тег form:hidden:

<form:hidden path="id" />

Взгляните на скрытый тег ввода раздел документов Spring.

2 голосов
/ 02 ноября 2011

Я думаю, что решил проблему. Если я напишу тег ввода, как это

<form:hidden path="id" value="${record}" />

таким образом, я могу переназначить значение скрытой переменной, но когда я просматриваю визуализированный HTML-код, это выглядит так

<input type="hidden" value="0" name="record" value="10"/>

генерирует атрибут value дважды и принимает желаемое значение, равное 10. Но это решает мою проблему. Если у кого-то есть дополнительные комментарии по этому поводу, тогда это будет оценено.

2 голосов
/ 30 сентября 2011

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

Код JSP, который вы опубликовали, имеет несколько проблем.

  1. нет закрывающего тега для элемента <td>.
  2. ваша форма публикуется в "items.html". Это похоже на HTML-страницу. Если это так, то ваше действие в форме верное на 0%.
  3. каждая форма имеет один и тот же идентификатор, поэтому вызов getElementById() может никогда не сработать.
  4. href="#" приведет к прокрутке вашей страницы вверх, когда пользователь щелкнет ссылку.
  5. Вы не указываете пользователю, какую запись следует удалить.

Вот то, что я думаю, вы хотите:

<c:forEach var="record" items="${records}">
    <tr>
        <td>
            <form:form method="post">
                <input type="hidden" name="activity" value="delete"/>
                <input type="hidden" name="record" value="${record}"/>
                <a href="javascript:this.form.submit()">Delete ${record}</a>
            </form:form>
        <td>
    </tr>
</c:forEach>

Фрагмент отправит сообщение текущему контроллеру пружины. В сообщение включены два поля: «активность», которая идентифицирует это как удаление, и «запись», которая определяет удаляемую запись. В зависимости от ваших потребностей, добавьте action="some url" к тегу form:form.

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