gpt4 book ai didi

java - 表单支持对象的 Map 字段的 BindingResult拒绝值

转载 作者:行者123 更新时间:2023-11-30 04:36:51 24 4
gpt4 key购买 nike

我有一个 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>

现在在我的 Controller 上,我想查看用户是否回答了所有问题,否则我想用 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()”方法以使其更干净(没有字符串连接),但似乎这是不可能的。

关于java - 表单支持对象的 Map 字段的 BindingResult拒绝值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13288289/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com