如何从 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})。你不能那样做。

  1. 您正在尝试做的事情非常讨厌,可能不是正确的方法。您可能不需要将值从收音机复制到表单,因为您可以将收音机直接放在表单中。
  2. JSP 是一种非常古老的技术,大多数公司多年前就已经放弃了,而那些仍在使用它的公司也计划放弃它。
  3. 如果您真的必须使用 JSP,那么如果您使用 JSTL 库,您的生活会轻松得多,而且 MKYoung 有一些关于如何处理许多旧 java 问题的很棒的教程,包括您现在正在努力:https://mkyong.com/spring-mvc/spring-mvc-radiobutton-and-radiobuttons-example/
  4. 如果您说 "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/