Struts 2 select标签cssErrorClass属性校验报错时未渲染问题咨询
问题根因
你遇到的cssErrorClass不生效核心原因是校验错误的字段路径与select标签的name属性不匹配:
- 你在
Branch类的isValid()方法上添加了@AssertTrue类级别校验,校验报错后,错误会被绑定到person.branch这个路径下 - 但你的
<s:select>标签的name属性是person.branch.id,Struts2 UI标签默认只会查找和自身name属性完全匹配的字段错误,找不到对应错误自然不会渲染cssErrorClass - 同页面的textfield功能正常,是因为它的name
person.emailAddress和校验注解标注的字段路径完全一致,可以匹配到对应错误。
解决方案
提供三种可选方案,按改造成本从低到高排序:
方案1:给select标签指定errorName属性
Struts2所有UI标签都支持errorName属性,用来手动指定查找校验错误的路径,不需要使用默认的name属性,直接修改你的select代码即可:
<s:select label="person.branch" cssErrorClass="errDropdownField" errorName="person.branch" headerKey="-1" headerValue="Select Branch" list="viewService.branches" listKey="id" listValue="branchName" name="person.branch.id" />
该方案不需要修改任何后端代码,调整后即可生效。
方案2:调整校验逻辑,把错误绑定到branch.id路径
把Branch类里的类级别@AssertTrue校验改成直接给id字段加校验注解:
@Entity public class Branch implements Serializable { @Id @GeneratedValue @Min(value = 0, message = "branch.required") private Integer id; // 其余代码不变,删除原来isValid()方法上的@AssertTrue注解即可 }
调整后错误会绑定到person.branch.id路径,和select的name匹配,cssErrorClass会自动生效。
方案3:手动判断错误状态加样式
如果不想改动现有校验逻辑也不想修改标签默认属性,也可以直接用OGNL表达式动态判断添加样式:
<s:select label="person.branch" cssClass="%{hasFieldErrors('person.branch') ? 'errDropdownField' : ''}" headerKey="-1" headerValue="Select Branch" list="viewService.branches" listKey="id" listValue="branchName" name="person.branch.id" />
内容的提问来源于stack exchange,提问作者Erik Andersen
相关产品推荐
相关产品推荐

