我想在选中复选框时启用输入字段。另外,我想对文本字段进行服务器端验证,如果选中该复选框,我面临的问题就是当我检查多个并提交时使用字段的空值的表单然后在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;
}
答案 0 :(得分:2)
您的复选框元素具有相同的名称。因此,在服务器端,您必须使用request.getParameterValues()
来获取所有选中的值。
String[] communicationWays = request.getParameterValues("communicationWay");
// ...
使用request.getParameter()
时,例如${param}
正在执行,只会返回一个值,这是该组的第一个值。您可以使用${paramValues}
获取EL中的所有值。
但是,在EL中使用${paramValues}
来设置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;
}
在servlet中创建Map<String, Boolean>
并在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' : ''}