在校验之前,首先进行类型转换,如果类型转换失败,则直接报错
Action类中,复写validate()方法
addFieldError()方法含义为,指定参数1控件的错误信息为参数2,错误信息会显示在参数1控件的上方剧中位置,但这个前提是使用struts标签。如果没有使用struts标签,则需要在页面内添加:<s:fieldError></s:fieldError>错误信息反馈在此标签的位置
配置struts.xml文件
需要为你的action配置一个input result,因为struts验证机制是:一旦验证没有通过,则自动定向到input结果
[color=red]注意:input结果必须为dispatcher方式,
调用顺序为:setXxx();validate();execute()[/color]
1. 通过转换器将请求参数转换成相应的Bean属性;
2. 判断转换过程是否出现异常。如果有,则将其保存到ActionContext中,conversionError拦截器再封装为fieldError;如果没有,进行下一步;
3. 通过反射(Reflection)来调用validateXxx()方法(其中,Xxx表示Action的方法名);
4. 调用validate()方法;
5. 如果经过上述步骤没有出现fieldError,则调用Action方法;如果有,则会跳过Action方法,通过国际化将fieldError输出到页面。
遇到类型转换错误的时候(也就是说不能进行类型转换),struts2框架自动生成一条错误信息,并且将该错误信息放到addFieldError里面
类型转换与输入校验的流程
1. 首先Struts2对客户端传来的数据进行类型转换
2. 类型转换完毕后再进行输入校验
3. 如果类型转换和输入校验都没有错误发生,那么进入execute方法(调用商业逻辑)
注意:如果类型转换不成功,也同样要进行输入校验
类型转换出错,自动将错误信息添加到addFieldError中。
这样的机制反馈不够友好, 那么我们采用一种方式来替代struts2自动生成的错误信息:
[color=red]全局资源转化文件:[/color]
在struts.xml文件struts根标签内,加入:
name值 为struts2内置的 要用message来替换他
配置message.properties 在WEB-INFO\classes下
[img]/upload/attachment/136646/e30aa6c0-e005-370e-88ed-0295f51e11b8.jpg[/img]
含义为:只要类型转化有错误, 就赋予其默认值0,然后反馈错误信息“error”
[color=red]局部资源转化文件:[/color]
配置与action类同名的properties文件(同一目录下)
文件内容:
含义为:当你关联的action类中的age属性转化错误时, 反馈信息为”age conversion error”
[size=medium]native2ascii.exe使用
[img]/upload/attachment/136648/86278aea-affe-34ff-b089-3f61c34e0b18.jpg[/img]
第一种方式:输入,然后输出为unicode
[img]/upload/attachment/136650/d17ae044-cbc4-36d7-a2e8-55ac94f02500.jpg[/img]
第二种方式:文件转化为文件
[img]/upload/attachment/136652/c26a9a17-c65d-3d56-b114-096f8d3ca24b.jpg[/img]
源文件,目标文件
default.properties[/size]
struts2错误有两种
一种是field级别的;另一种是action级别的
addActionError()
struts2表单标签内置提示错误机制, 但仅限于fieldError
addFieldError()将错误信息添加到Map中;addActionError()添加到Collection中
显示ActionError需要在视图中加入<s:actionerror />Struts2标签
[img]/upload/attachment/136654/733af215-8cc9-387f-ad7b-be3241bbfe0e.jpg[/img]
theme=””属性 主题;simple表示不使用表格,并且显示fielderror机制失效。 使用theme=simple 则使struts标签封装的额外功能失效。如label失效, 等等
[img]/upload/attachment/136656/56501368-5917-3d2d-8898-cdc8b51ed4e3.jpg[/img]
如果action 具有method属性, 则执行method指定的方法, 跳过execute方法
void abc() 方法于execute除了名字不同 其他全部相同, 包括执行机制
[img]/upload/attachment/136658/ed0dc689-9d80-31fa-87b9-5e9793e89b35.jpg[/img]
配置多个逻辑的action
[img]/upload/attachment/136660/d8cc25c3-1fce-3b3b-9f3e-f19fcdfb3854.jpg[/img]
既然有多个处理业务逻辑的方法, 则需要多个验证类 , 下面是解决方案
方法名为abc() 则 abc 的验证方法为 validateAbc()
对于一个action来说, 如果你有自定义的方法,以及验证方法,
首先执行validateAbc()方法;然后无论validateAbc()是否通过都去执行validate()方法. 也就是说validate()是必须执行的; 如果这其中没有任何转化错误和验证错误, 才去执行相应的业务逻辑方法.
但是这种机制不合理, 因为自定义方法已经有自己的验证方法, 无需调用validate()方法。 解决方式有两个:1、将validate() 内容写为空。2、将validate()方法改名为validateExecute()
Action类中,复写validate()方法
public void validate() {
if (null == this.getUsername() || "".equals(this.getUsername().trim())) {
this.addFieldError("username", "username required");
}
if (null == this.getPassword() || "".equals(this.getPassword().trim())) {
this.addFieldError("password", "password required");
}
}
addFieldError()方法含义为,指定参数1控件的错误信息为参数2,错误信息会显示在参数1控件的上方剧中位置,但这个前提是使用struts标签。如果没有使用struts标签,则需要在页面内添加:<s:fieldError></s:fieldError>错误信息反馈在此标签的位置
配置struts.xml文件
需要为你的action配置一个input result,因为struts验证机制是:一旦验证没有通过,则自动定向到input结果
<action name="register" class="com.test.action.RegisterAction">
<result name="success">/success.jsp</result>
<result name="input">/register.jsp</result>
[color=red]注意:input结果必须为dispatcher方式,
调用顺序为:setXxx();validate();execute()[/color]
1. 通过转换器将请求参数转换成相应的Bean属性;
2. 判断转换过程是否出现异常。如果有,则将其保存到ActionContext中,conversionError拦截器再封装为fieldError;如果没有,进行下一步;
3. 通过反射(Reflection)来调用validateXxx()方法(其中,Xxx表示Action的方法名);
4. 调用validate()方法;
5. 如果经过上述步骤没有出现fieldError,则调用Action方法;如果有,则会跳过Action方法,通过国际化将fieldError输出到页面。
遇到类型转换错误的时候(也就是说不能进行类型转换),struts2框架自动生成一条错误信息,并且将该错误信息放到addFieldError里面
类型转换与输入校验的流程
1. 首先Struts2对客户端传来的数据进行类型转换
2. 类型转换完毕后再进行输入校验
3. 如果类型转换和输入校验都没有错误发生,那么进入execute方法(调用商业逻辑)
注意:如果类型转换不成功,也同样要进行输入校验
类型转换出错,自动将错误信息添加到addFieldError中。
这样的机制反馈不够友好, 那么我们采用一种方式来替代struts2自动生成的错误信息:
[color=red]全局资源转化文件:[/color]
在struts.xml文件struts根标签内,加入:
<constant name=”struts.custom.i18n.resources” value=”message” > </constant>
name值 为struts2内置的 要用message来替换他
配置message.properties 在WEB-INFO\classes下
[img]/upload/attachment/136646/e30aa6c0-e005-370e-88ed-0295f51e11b8.jpg[/img]
含义为:只要类型转化有错误, 就赋予其默认值0,然后反馈错误信息“error”
[color=red]局部资源转化文件:[/color]
配置与action类同名的properties文件(同一目录下)
文件内容:
含义为:当你关联的action类中的age属性转化错误时, 反馈信息为”age conversion error”
[size=medium]native2ascii.exe使用
[img]/upload/attachment/136648/86278aea-affe-34ff-b089-3f61c34e0b18.jpg[/img]
第一种方式:输入,然后输出为unicode
[img]/upload/attachment/136650/d17ae044-cbc4-36d7-a2e8-55ac94f02500.jpg[/img]
第二种方式:文件转化为文件
[img]/upload/attachment/136652/c26a9a17-c65d-3d56-b114-096f8d3ca24b.jpg[/img]
源文件,目标文件
default.properties[/size]
struts2错误有两种
一种是field级别的;另一种是action级别的
addActionError()
struts2表单标签内置提示错误机制, 但仅限于fieldError
addFieldError()将错误信息添加到Map中;addActionError()添加到Collection中
显示ActionError需要在视图中加入<s:actionerror />Struts2标签
[img]/upload/attachment/136654/733af215-8cc9-387f-ad7b-be3241bbfe0e.jpg[/img]
theme=””属性 主题;simple表示不使用表格,并且显示fielderror机制失效。 使用theme=simple 则使struts标签封装的额外功能失效。如label失效, 等等
[img]/upload/attachment/136656/56501368-5917-3d2d-8898-cdc8b51ed4e3.jpg[/img]
如果action 具有method属性, 则执行method指定的方法, 跳过execute方法
public String execute() throws Exception{}
public String Abc() throws Exception{}
void abc() 方法于execute除了名字不同 其他全部相同, 包括执行机制
[img]/upload/attachment/136658/ed0dc689-9d80-31fa-87b9-5e9793e89b35.jpg[/img]
配置多个逻辑的action
[img]/upload/attachment/136660/d8cc25c3-1fce-3b3b-9f3e-f19fcdfb3854.jpg[/img]
既然有多个处理业务逻辑的方法, 则需要多个验证类 , 下面是解决方案
方法名为abc() 则 abc 的验证方法为 validateAbc()
对于一个action来说, 如果你有自定义的方法,以及验证方法,
首先执行validateAbc()方法;然后无论validateAbc()是否通过都去执行validate()方法. 也就是说validate()是必须执行的; 如果这其中没有任何转化错误和验证错误, 才去执行相应的业务逻辑方法.
但是这种机制不合理, 因为自定义方法已经有自己的验证方法, 无需调用validate()方法。 解决方式有两个:1、将validate() 内容写为空。2、将validate()方法改名为validateExecute()