如何突出Struts2验证失败的字段?

时间:2016-05-02 15:13:20

标签: javascript java jquery html struts2

我有一个用户想要突出显示Struts2验证失败的字段。

我计划为我的Action-validation.xml方法中失败的任何字段设置一个标志,并在加载JSP页面时使用该字段更改字段的背景。

我的问题是如何处理validate()文件中验证失败的字段?我是否需要在{{1}}方法中进行所有验证?

还有一种方法可以突出显示生成

的字段
  

字段的字段值无效...

错误?

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:5)

此功能已在Struts2中构建,无需自定义标志或其他任何内容。在Struts2表单标签中有cssErrorClass属性,它将在出错时为字段设置CSS类。

<style type="text/css">
    .errField {
        background-color: red;
    }
</style>

<s:textfield key="name" cssErrorClass="errField" />

答案 1 :(得分:2)

  

我是否需要在validate()方法中进行所有验证?

没有

  

如何在Action-validation.xml文件中处理未通过验证的字段?

简单地放弃旗帜的想法,你正在重新发明轮子。

当验证失败时,无论是通过注释还是XML,都会添加fieldError。相反,当您使用validate()方法时,您应该自己添加它。

然而,结果是相同的:你将有一个fieldError,其中每个字段的名称都没有传递一个或多个验证。

请注意:

  

还有一种方法可以突出显示生成

的字段      
    

字段的字段值无效...

  
     

错误?

这些是转换错误。它们由转换拦截器(read more)添加。

最后,无论是XML,validate(),转换还是其他任何类型的fielderror都将在该对象中,那就是

Map<String,List<String>>

因为每个字段都可能有多个错误。

您可以在页面中迭代该地图,以便在使用simple主题时通过Javascript(甚至是CSS)突出显示相关字段,因为with the other themes is just a mess)。

例如:

<style>
    .highlightedError {
        border: 2px solid red;
    }
</style>

<script>
    $(function(){
        <s:if test="hasFieldErrors()">
            <s:iterator value="fieldErrors">
                var currentFieldError = '<s:property value="key" escapeJavascript="true" />';
                $('[name="'+currentFieldError+"']").addClass('highlightedError');
            </s:iterator>
        </s:if>
    });
</script>