六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 132|回复: 0

如何自定义Struts2表单验证后的错误信息显示格式/样式_第二话

[复制链接]

升级  12.67%

19

主题

19

主题

19

主题

秀才

Rank: 2

积分
69
 楼主| 发表于 2013-2-6 10:13:19 | 显示全部楼层 |阅读模式
如何自定义Struts2表单验证后的错误信息显示格式/样式_第二话
 
李顺利
2010年9月28日
 
 Googel 标签: 李顺利 ;Java ;Java EE ;struts2 ;验证 ;错误信息 ;显示格式 ;自定义 ;换行 ;黑点 ;sfielderror ;后面
 前面写过如何自定义Struts2表单验证后的错误信息显示格式/样式,文章,收到了几位好友的一些意见和支持感到很开心,现在网上类似问题的解决文章已经很多了,今天在这里,也仅是整理和学习,其中也算有一种新的方法来分享给大家。(Struts2 显示错误的时候出现黑点和换行问题)
环境

 Struts 2.1.8.1 + Myeclipse 8.6 + Tomcat 7.0.2
前提

 请大家搭建好Struts2的Web项目,这个应该很简单,就不在叙述,本篇文章主要做的是如何显示Struts的错误信息,那么这里就建立一个Action类,来模拟产生的错误。请看下面的Action类。(源码会在后面提供)
            public class DisplayErrorInfoAction extends ActionSupport
            {
                private static final long serialVersionUID = -2690064846056775963L;
             
                @Override
                public String execute() throws Exception
                {
                   /**
                    * 添加一些FieldError供测试,如果需要请自写validater方法
                    */
                   this.addFieldError("displayErrorInfo", "error!Please check it.");
                   this.addFieldError("user.username", "名字有错误啦");
                   return INPUT;
                }
            }
            
方案

第一种方案:使用OGNL拿值栈(ValueStack)的内容(重点推荐使用)

主要是通过OGNL来取得Value Stack 中 errors 和fieldErrors的值。这里先来介绍下s:debug 的标签。
debug标签主要用于辅助测试,它在页面上生成一个超链接,通过该链接可以查看ValueStack和Stack Context 中的所有值信息。可以通过OGNL 中 s:property来取得相应的值(顺利提醒: s:debug 使用请放在 s:form外面,放在里面有什么效果,请大家试试就知道了)。附上本案例使用的代码。

注:请大家关注下error code 包含‘.’(类似于user.username)的取值方法:
<s:property value="errors['user.username'][0]" /> 和 <s:property value="fieldErrors['user.username'][0]" />
(网上“struts2 property标签的 value属性” 的解决方案)



[table][tr][td=1,1,944]                <body>
                   <s:form action="displayErrorInfo" method="post" theme="simple">
                       <h1 align="center" style="color: blue">
                          DisplayErrorInfoForStruts2Demo1(使用OGNL拿值栈的内容,推荐使用)
                       </h1>
                       <h2 dir="rtl">
                          顺利整理
                       </h2><hr><hr>
                       1.1.All ErrorInfos(Map): <s:property value="errors" /><br>
                       1.2.All fieldErrorsInfos(Map): <s:property value="fieldErrors" /><br>
                       <hr>
                       2.1.DisplayErrorInfo in errors(errors.displayErrorInfo[0]):<s:textfield />
                       <font color="red">
                          <s:property value="errors.displayErrorInfo[0]" />
                       </font><br>
                       2.2.DisplayErrorInfo 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.DisplayErrorInfo in errors(一般不会使用到[1],这里仅是测试):<s:textfield />
                       <font color="red">
                          <s:property value="errors.displayErrorInfo[1]" />
                       </font>
                       <br>
                       <hr>
                       3.1.DisplayErrorInfo in fieldErrors(fieldErrors.displayErrorInfo[0]):<s:textfield />
                       <font color="red">
                          <s:property value="fieldErrors.displayErrorInfo[0]" />
                       </font>
                       <br>
                       3.2.DisplayErrorInfo in fieldErrors(fieldErrors['displayErrorInfo'][0]):<s:textfield />
                       <font color="red">
                          <s:property value="fieldErrors['displayErrorInfo'][0]" />
                       </font>
                       <br>
                            <font color="green">注:建议使用fieldErrors取值,在Action中使用的是this.addFieldError</font>
                       <br>
                       <hr>
                       4.0.DisplayErrorInfo - user.username(正确的表达式.errors['user.username'][0]):<s:textfield />
                       <font color="red">
                          <s:property value="errors['user.username'][0]" />
                       </font>
                       <br>
                       4.1.DisplayErrorInfo - user.username(正确的表达式.fieldErrors['user.username'][0]):<s:textfield />
                       <font color="red">
                          <s:property value="fieldErrors['user.username'][0]" />
                       </font>
                       <br>
                       <font color="blue">
                          4.2.DisplayErrorInfo - user.username(错误的表达式1.errors.%{user.username}[0]):<s:textfield />
                          <font color="red">
                              <s:property value="errors.%{user.username}[0]" />
                          </font>
                          <br> 4.3.DisplayErrorInfo - user.username(错误的表达式2.errors.# {user.username}[0]):<s:textfield />
                           这种方法本身语言就有问题,详情请看JSP规范对# 的规范
                          <br> 4.4.DisplayErrorInfo - user.username(错误的表达式3.%{errors.user.username}[0]):<s:textfield />
                          <font color="red">
            
                  <s:property value="%{errors.user.username}[0]" /> </fon
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表