我有一个Java类'QueAndAns',其中有一个字段
private Map<String,String> questionAndAnswerMap;
在我的JSP页面上
<form:form action="${submitURL}" method="POST" modelAttribute="queAndAns">
<c:forEach items="${queAndAns.questionAndAnswerMap}" var="questionAndAnswer" varStatus="status">
<form:input id="securityQuestions${status.index}" path="questionAndAnswerMap[${questionAndAnswer.key} ${questionAndAnswer.value}]"/>
<form:errors cssClass="errors" id="_securityQuestions_error_id" path="questionAndAnswerMap"/>
</c:forEach>
<input id="proceed" type="submit" value="${fn:escapeXml(find_button)}"/>
</form:form>
现在在我的控制器上,我想查看用户是否已回答所有问题,否则我想用
bindingResult.rejectValue
返回它。我正在尝试这样的事情:Map<String, String> questionAndAnswerMap = queAndAns.getQuestionAndAnswerMap();
Iterator<Map.Entry<String, String>> iterator = questionAndAnswerMap.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry<String, String> map = iterator.next();
if (null == map.getValue() || StringUtils.isEmpty(map.getValue())) {
bindingResult.rejectValue("questionAndAnswerMap" , "err_qna_not_blank", "Please fill up the answer for security questions");
}
}
但它不起作用。
有什么办法可以做到吗?
最佳答案
这最后几个小时我也一直在努力。终于找到了解决方案:
您的路径定义应如下所示
<form:input id="securityQuestions${status.index}" path="questionAndAnswerMap['${questionAndAnswer.key}']"/>
<form:errors cssClass="errors" id="_securityQuestions_error_id" path="questionAndAnswerMap['${questionAndAnswer.key}']"/>
您的验证应如下所示
bindingResult.rejectValue( "questionAndAnswerMap['"+map.getKey()+"']" , "err_qna_not_blank", "Please fill up the answer for security questions");
我还尝试在“ BindingResult”中使用“ nestedPath”标记和“ pushNestedPath()”方法使其更加整洁(没有字符串连接),但似乎不可能。