Скрытое поле в spring MVC

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

<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>

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

Спасибо

Ответ 1

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

<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

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

Указанный JSP-код имеет несколько проблем.

  • Отсутствует тег close для элемента <td>.
  • Ваша форма отправляется на "items.html". Кажется, это html-страница. Если это так, ваше действие формы 0% правильно.
  • каждая форма имеет одинаковый идентификатор, поэтому вызов getElementById() не может работать.
  • href="#" заставит вашу страницу прокручивать вверх, когда пользователь нажимает на ссылку.
  • Вы не определяете пользователю запись, которую нужно удалить.

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

<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>

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

Ответ 3

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

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

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

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

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