如何从 html 输入收音机中获取值并将其放入 jsp java 中的输入隐藏字段
How to get value from html input radio and put it in input hidden field in jsp java
我有单选按钮的代码
<input type="radio" name="opt" id="1" value="1"/><label for="1">${dto.quesOpt1}</label>
<br/>
<input type="radio" name="opt" id="2" value="2"/><label for="2">${dto.quesOpt2}</label>
<br/>
<input type="radio" name="opt" id="3" value="3"/><label for="3">${dto.quesOpt3}</label>
<br/>
<input type="radio" name="opt" id="4" value="4"/><label for="4">${dto.quesOpt4}</label>
我想把这个值放在这里,这样我就可以把它传递给我的 Servlet
<form action="MainController" method="POST">
<input type="hidden" name="quesNum" value="${requestScope.QUESNUM}"/>
<input type="hidden" name="quesId" value="${dto.quesId}"/>
<input type="hidden" name="quesChoice" value="${param.opt}"/> <--------- here
<input type="hidden" name="amount" value="${requestScope.AMOUNT}"/>
<input type="hidden" name="action" value="Previous Question"/>
<input type="submit" value="Previous" <c:if test="${requestScope.QUESNUM == 0}">disabled</c:if>/>
</form>
我在 Servlet 中总是得到空值
request.getParameter("quesChoice")
不知道怎么传值。请指导我。谢谢。
您要做的是在浏览器中执行服务器端代码(如 ${dto.quesId}
)。你不能那样做。
- 您正在尝试做的事情非常讨厌,可能不是正确的方法。您可能不需要将值从收音机复制到表单,因为您可以将收音机直接放在表单中。
- JSP 是一种非常古老的技术,大多数公司多年前就已经放弃了,而那些仍在使用它的公司也计划放弃它。
- 如果您真的必须使用 JSP,那么如果您使用 JSTL 库,您的生活会轻松得多,而且 MKYoung 有一些关于如何处理许多旧 java 问题的很棒的教程,包括您现在正在努力:https://mkyong.com/spring-mvc/spring-mvc-radiobutton-and-radiobuttons-example/
- 如果您说 "fuck it, I want to code it the way I was planning to do that all along anyway",您仍然需要 JavaScript 来复制您的值,因为这是处理浏览器端操作的 JavaScript。
说了这么多,这就是使用纯 JS 的方法:
<html>
<script>
function copyValue() {
let allOptions = Array.prototype.slice.call(document.getElementsByName('opt'));
let selectedOption = allOptions.filter(opt => opt.checked)[0];
let selectedOptionValue = selectedOption ? selectedOption.value : undefined;
document.getElementById('quesNum').value = selectedOptionValue;
}
</script>
<body>
<input type="radio" name="opt" id="1" value="1"/><label for="1">${dto.quesOpt1}</label>
<br/>
<input type="radio" name="opt" id="2" value="2"/><label for="2">${dto.quesOpt2}</label>
<br/>
<input type="radio" name="opt" id="3" value="3"/><label for="3">${dto.quesOpt3}</label>
<br/>
<input type="radio" name="opt" id="4" value="4"/><label for="4">${dto.quesOpt4}</label>
<input type="hidden" name="quesNum" id="quesNum" value="${requestScope.QUESNUM}"/>
<input type="button" value="Copy Value" onClick="copyValue()"/>
</body>
</html>
请注意我是如何添加 id="quesNum"
然后添加 onClick="copyValue()"
来触发操作的。
如果你想玩的话,这里是 JSFiddle 中的例子:https://jsfiddle.net/kgjanowski/5ymubn6v/22/
我有单选按钮的代码
<input type="radio" name="opt" id="1" value="1"/><label for="1">${dto.quesOpt1}</label>
<br/>
<input type="radio" name="opt" id="2" value="2"/><label for="2">${dto.quesOpt2}</label>
<br/>
<input type="radio" name="opt" id="3" value="3"/><label for="3">${dto.quesOpt3}</label>
<br/>
<input type="radio" name="opt" id="4" value="4"/><label for="4">${dto.quesOpt4}</label>
我想把这个值放在这里,这样我就可以把它传递给我的 Servlet
<form action="MainController" method="POST">
<input type="hidden" name="quesNum" value="${requestScope.QUESNUM}"/>
<input type="hidden" name="quesId" value="${dto.quesId}"/>
<input type="hidden" name="quesChoice" value="${param.opt}"/> <--------- here
<input type="hidden" name="amount" value="${requestScope.AMOUNT}"/>
<input type="hidden" name="action" value="Previous Question"/>
<input type="submit" value="Previous" <c:if test="${requestScope.QUESNUM == 0}">disabled</c:if>/>
</form>
我在 Servlet 中总是得到空值
request.getParameter("quesChoice")
不知道怎么传值。请指导我。谢谢。
您要做的是在浏览器中执行服务器端代码(如 ${dto.quesId}
)。你不能那样做。
- 您正在尝试做的事情非常讨厌,可能不是正确的方法。您可能不需要将值从收音机复制到表单,因为您可以将收音机直接放在表单中。
- JSP 是一种非常古老的技术,大多数公司多年前就已经放弃了,而那些仍在使用它的公司也计划放弃它。
- 如果您真的必须使用 JSP,那么如果您使用 JSTL 库,您的生活会轻松得多,而且 MKYoung 有一些关于如何处理许多旧 java 问题的很棒的教程,包括您现在正在努力:https://mkyong.com/spring-mvc/spring-mvc-radiobutton-and-radiobuttons-example/
- 如果您说 "fuck it, I want to code it the way I was planning to do that all along anyway",您仍然需要 JavaScript 来复制您的值,因为这是处理浏览器端操作的 JavaScript。
说了这么多,这就是使用纯 JS 的方法:
<html>
<script>
function copyValue() {
let allOptions = Array.prototype.slice.call(document.getElementsByName('opt'));
let selectedOption = allOptions.filter(opt => opt.checked)[0];
let selectedOptionValue = selectedOption ? selectedOption.value : undefined;
document.getElementById('quesNum').value = selectedOptionValue;
}
</script>
<body>
<input type="radio" name="opt" id="1" value="1"/><label for="1">${dto.quesOpt1}</label>
<br/>
<input type="radio" name="opt" id="2" value="2"/><label for="2">${dto.quesOpt2}</label>
<br/>
<input type="radio" name="opt" id="3" value="3"/><label for="3">${dto.quesOpt3}</label>
<br/>
<input type="radio" name="opt" id="4" value="4"/><label for="4">${dto.quesOpt4}</label>
<input type="hidden" name="quesNum" id="quesNum" value="${requestScope.QUESNUM}"/>
<input type="button" value="Copy Value" onClick="copyValue()"/>
</body>
</html>
请注意我是如何添加 id="quesNum"
然后添加 onClick="copyValue()"
来触发操作的。
如果你想玩的话,这里是 JSFiddle 中的例子:https://jsfiddle.net/kgjanowski/5ymubn6v/22/