我想在选中复选框时启用输入字段。另外,我想对要填写的文本字段进行服务器端验证,如果选中该复选框,我面临的问题是,当我检查多个并提交表单的字段值为空,然后在 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
状态并不完全是微不足道的。有两种方法可以解决这个问题:
创建一个自定义 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; }
创建
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/