java - JSP:一些表单字段是稳定的,而另一些则不稳定!

标签 java jsp

我想在选中复选框时启用输入字段。另外,我想对要填写的文本字段进行服务器端验证,如果选中该复选框,我面临的问题是,当我检查多个并提交表单的字段值为空,然后在 servlet 中进行验证并将结果返回给用户以填充输入,其中一个检查字段被检查,另一个则没有,即使我使用 param 两者都提交稳定,我不知道是什么原因!

这是 HTML 代码

 <div class="groupElement">

  <input type="checkbox" name="communicationWay" id="communicationWay2" value="emailOption" ${param.communicationWay == 'emailOption'?'checked':'' } onchange="chgtx('email','communicationWay2')"/>
  <label>Email</label>


     <input class="inpClass" id="email" type="text" name="emailComm" value="${param.emailComm}" disabled/>

</div>

 <div class="groupElement">

  <input type ="checkbox" name="communicationWay" id="communicationWay"  value="cellPhoneOption" ${param.communicationWay == 'cellPhoneOption'?'checked':''} onchange="chgtx('cellPhone','communicationWay')" />
   <label> Cell phone number</label>

    <input class="inpClass" id="cellPhone" type ="text" name="cellPhoneNoComm" value="${param.cellPhoneNoComm}" disabled />

     </div>

这是在启用和禁用输入字段之间触发的 java 脚本函数

 function chgtx(field, checkbox) {

            var myField = document.getElementById(field);
            var checkBtton = document.getElementById(checkbox);
            myField.disabled= !checkBtton.checked;

        }

最佳答案

您的复选框元素具有相同的名称。所以在服务器端你必须使用request.getParameterValues()获取所有检查的值。

String[] communicationWays = request.getParameterValues("communicationWay");
// ...

当您使用request.getParameter()时,如${param}执行时,只会返回一个值,即该组的第一个值。您可以使用${paramValues}获取 EL 中的所有值。

但是,使用${paramValues}在 EL 中设置checked状态并不完全是微不足道的。有两种方法可以解决这个问题:

  1. 创建一个自定义 EL 函数,执行类似的操作

    ${util:contains(paramValues.communicationWays, 'emailOption') ? 'checked' : ''}
    ${util:contains(paramValues.communicationWays, 'phoneOption') ? 'checked' : ''}
    

    public static boolean contains(Object[] array, Object value) {
        Arrays.sort(array);
        return Arrays.binarySearch(array, value) > -1;
    }
    
  2. 创建 Map<String, Boolean>在 servlet 中并在 EL 中使用它。

    Map<String, Boolean> communicationWays = new HashMap<String, Boolean>();
    request.setAttribute("communicationWays", communicationWays);
    
    for (String communicationWay : request.getParameterValues("communicationWay")) {
        communicationWays.put(communicationWay, true);
    }
    

    ${communicationWays.emailOption ? 'checked' : ''}
    ${communicationWays.phoneOption ? 'checked' : ''}
    

关于java - JSP:一些表单字段是稳定的,而另一些则不稳定!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5695765/

相关文章:

java - LinkedList.iterator() 返回什么对象?

java - Liferay portlet + struts2 + Ajax

java - j2ee 应用程序中用户友好的 url

java - 我可以使用 Java 中的信使服务器做什么

java - 如何显示视频的缩略图?安卓

c# - 测试 C# 与 Java 性能(执行)时要关注哪些方面?

java - 使用 Eclipse 和 JBoss 调试 JSP

java - Struts2 如何将 URL 映射到操作?

java - 数据库详细信息未在 Spring-MVC 中显示

java - 密封 .jar 时会密封哪些特定包?