我有一个使用spring form控件的简单表单。我也在控件上使用dojoType。
例如:<form:input path="salary" style="width:10em" dojoType="dijit.form.ValidationTextBox"/>
我正在使用dojo进行一些表单验证。我还在spring中添加了一些服务器端验证。我试图使用弹簧验证来更新我的dijit字段,以突出显示错误。这就是我提出的。这感觉就像一个黑客,我想知道是否有人有更好的解决方案。
首先在表单的最底部我有一个隐藏的span元素,列出了spring返回的所有错误:hasBindErrors如下:
<span id="allErrors" style="visibility:hidden">
<spring:hasBindErrors name="myForm">
<c:forEach var="error" items="${errors.allErrors}">
${error.field}
</c:forEach>
</spring:hasBindErrors>
</span>
然后我在onAddLoad上添加了一个dojo函数,它抛出了表单字段的字符串,删除了任何括号,然后将dijit类设置为该字段的错误,如下所示:
dojo.addOnLoad(displayErrors);
function displayErrors() {
dojo.forEach(dojo.trim(dojo.byId("allErrors").innerHTML).split(" "), function(value) {
var newVal = value.replace(/[\[\]]/g, '');
if (dojo.byId(newVal+'.errors') != 'undefined') {
dijit.byId(newVal).state = "Error";
dijit.byId(newVal)._setStateClass();
}
});
}
(我做替换的原因是因为spring生成没有括号的id属性,但是将它们留在name属性上。而且错误是通过name而不是id引用的。)
这很好但我只是想知道是否有其他人遇到任何与此类似的解决方案,或者是否有更简单的方法来做同样的事情。
由于