#html #forms #jstl
#HTML #формы #jstl
Вопрос:
Я знаю, что этот вопрос, вероятно, задавался раньше, но, похоже, я не могу найти разумный ответ на него в моих обстоятельствах.
У меня есть форма с несколькими кнопками в ней, которые отправляют, и я должен знать, какая кнопка была нажата.
небольшой фрагмент кода внутри формы может выглядеть следующим образом:
<input type="submit" name="action" value="<fmt:message key="ID001"/>"/> <!-- Save -->
<input type="submit" name="action" value="<fmt:message key="ID002"/>"/> <!-- Delete -->
<input type="submit" name="action" value="<fmt:message key="ID003"/>"/> <!-- some other action -->
Часть fmt: message просто учитывает язык клиента и помещает слово на кнопку.
До сих пор я добавлял обработчик действий к кнопкам отправки и добавлял скрытый элемент ввода в форму, сообщающий мне, какой из них был нажат, но мне нужно поддерживать сайт, не зависящий от javascript.
Поскольку значения кнопок являются переменными, как я могу подойти к этому? (По сути, я могу это сделать, если на входе было место для указания значения =»» и текста =»», но это не так)
Я подумал о том, чтобы переместить нужные мне «значения», такие как «сохранить» и «удалить», в атрибут name и проверить, установлено ли значение, выполнив что-то вроде следующего:
<c:if test="${!empty param.save}">
.
.
.
</c:if>
Однако проблема возникает, когда у меня есть, скажем, список размера x, каждый из которых может быть удален.
Я приведу вам пример того, что я имею в виду:
форма jsp:
<input type="submit" name="delete_row|1" value="<fmt:message key="ID001"/>"/> <!-- delete first row-->
<input type="submit" name="delete_row|2" value="<fmt:message key="ID002"/>"/> <!-- deleted second row -->
<input type="submit" name="delete_row|3" value="<fmt:message key="ID003"/>"/> <!-- delete third row -->
...
jsp на стороне сервера:
<c:if test="${!empty param.delete_row|x}">
.
. <%-- handle the specific row deletion here--%>
.
</c:if>
^- Я понятия не имею, каким будет этот x … это может быть 1, или 100, или даже больше, поэтому мне нужен способ найти любой параметр, начинающийся с delete_row, и как-то его разграничить.
Я немного изучил его и нашел <button>
элемент, однако он не поддерживается в некоторых версиях IE (IE<8, насколько я помню?).
Итак, мои ограничения таковы:
- нет js
- должен поддерживаться браузерами, такими же старыми, как IE6 или, предпочтительно, даже более
У кого-нибудь есть какие-нибудь предложения? Пожалуйста, прокомментируйте, если мне нужно что-то объяснить более подробно,
Ответ №1:
Используйте button
вместо input
:
<button name='submit' type='submit' value='1'><fmt:message key="ID001"/></button>
<button name='submit' type='submit' value='2'><fmt:message key="ID002"/></button>
<button name='submit' type='submit' value='3'><fmt:message key="ID003"/></button>
И если вы хотите иметь кнопку с возможностью нажатия, но не отправляете форму, добавьте type='button'
к ней.
Комментарии:
1. Спасибо за быстрый ответ, Юстинас. Меня беспокоит то, что элемент <button> не поддерживается более старыми версиями IE, поэтому я задавал этот вопрос, чтобы найти другой способ обойти это. Возможно, в конечном итоге мне придется поговорить об этом с моим боссом, но, насколько я знаю, большое количество людей все еще используют очень старые версии IE, и поэтому я должен его поддерживать.
Ответ №2:
Насколько я понимаю, и надеюсь, что кто-нибудь поправит меня, если я ошибаюсь, спецификации HTML не предоставляют то, что вы ищете в случае использования. Который, кстати, рекомендовал бы вам посмотреть в спецификациях HTML4.
Итак, либо вы не поддерживаете старые браузеры, либо используете Java script. В обоих случаях вам нужно будет поговорить с вашим боссом.