前面写过如何自定义Struts2表单验证后的错误信息显示格式/样式,文章,收到了几位好友的一些意见和支持感到很开心,现在网上类似问题的解决文章已经很多了,今天在这里,也仅是整理和学习,其中也算有一种新的方法来分享给大家。
### 如何自定义Struts2表单验证后的错误信息显示格式/样式
#### 环境配置
本文档基于以下技术栈来进行示例说明:
- **框架版本**:Struts2.1.8.1
- **开发工具**:MyEclipse8.6
- **服务器**:Tomcat7.0.2
#### 前提条件
在深入讨论自定义错误信息显示格式之前,确保已经搭建好了Struts2的Web项目。这一步对于熟悉Struts2的开发者来说应该非常简单。
#### 创建Action类
为了演示错误信息的处理过程,我们需要创建一个Action类来模拟产生错误的情况。下面是一个简单的示例:
```java
public class DisplayErrorInfoAction extends ActionSupport {
private static final long serialVersionUID = -2690064846056775963L;
@Override
public String execute() throws Exception {
// 添加一些FieldError供测试,如果需要请自写validate方法
this.addFieldError("displayErrorInfo", "error! Please check it.");
this.addFieldError("user.username", "名字有错误啦");
return INPUT;
}
}
```
#### 方案一:使用OGNL获取值栈内容
**核心思想**:通过OGNL (Object-Graph Navigation Language) 获取`ValueStack`中的`errors`和`fieldErrors`的值。OGNL是一种强大的表达式语言,用于获取和设置Java对象的属性。
**标签介绍**:`s:debug`标签主要用于辅助测试,可以在页面上生成一个超链接,通过点击此链接可以查看`ValueStack`和`StackContext`中的所有值信息。
**示例代码**:
```html
<body>
<s:form action="displayErrorInfo" method="post" theme="simple">
<h1 align="center" style="color: blue">
Display Error Info for Struts2 Demo 1 (使用OGNL拿值栈的内容,推荐使用)
</h1>
<h2 dir="rtl">
顺利整理
</h2>
<hr>
<hr>
1.1. All Error Infos (Map): <s:property value="errors"/><br>
1.2. All field Errors Infos (Map): <s:property value="fieldErrors"/><br>
<hr>
2.1. Display Error Info in errors (errors.displayErrorInfo[0]):<s:textfield/>
<font color="red"><s:property value="errors.displayErrorInfo[0]"/></font><br>
2.2. Display Error Info in errors (errors['displayErrorInfo'][0]):<s:textfield/>
<font color="red"><s:property value="errors['displayErrorInfo'][0]"/></font><br>
<font color="green">注:拿到值后,就可以按照自己的格式进行自定义显示了</font><br>
2.3. Display Error Info in errors (一般不会使用到[1], 这里仅是测试):<s:textfield/>
<font color="red"><s:property value="errors.displayErrorInfo[1]"/></font><br>
<hr>
3.1. Display Error Info in fieldErrors (fieldErrors.displayErrorInfo[0]):
<s:textfield/>
<font color="red"><s:property value="fieldErrors.displayErrorInfo[0]"/></font><br>
...
```
#### 重点解析
1. **使用`s:property`标签获取错误信息**:如上面示例所示,我们可以利用`s:property`标签结合OGNL表达式来获取`ValueStack`中的错误信息。例如,`<s:property value="errors.displayErrorInfo[0]"/>`和`<s:property value="errors['displayErrorInfo'][0]"/>`都可以用来获取特定字段的错误信息。
2. **处理含有`.`的错误键**:当错误键包含`.`时,如`user.username`,可以使用`<s:property value="errors['user.username'][0]"/>`或`<s:property value="fieldErrors['user.username'][0]"/>`来正确获取对应的错误信息。
3. **自定义错误信息的显示格式**:通过以上方法获取到错误信息之后,可以根据需求对这些信息进行格式化处理。比如,可以改变字体颜色、大小、背景色等,甚至使用JavaScript动态调整显示方式,从而达到美观且易于用户理解的效果。
#### 总结
通过上述方案,我们可以实现对Struts2表单验证后错误信息的自定义显示格式。这对于提高用户体验、使应用程序更加友好和专业至关重要。此外,这种方法还提高了开发效率,简化了错误处理逻辑,让开发者能够更专注于业务逻辑的实现。