struts2检验框架的具体应用综合
p</result>
<result name="success">/validate/order.jsp</result>
</action>
<!--调用execute转到新增页面-->
<action name="ordernew" class="org.itfuture.www.actions.OrderAction" >
<result name="success">/validate/ordernew.jsp</result>
</action>
<!--调用传递的input方法转到新增页面-->
<action name="order_*" method="{1}" class="org.itfuture.www.actions.OrderAction" >
<result name="input">/validate/ordernew.jsp</result>
</action>
</package>
</struts>
二.校验框架代码是运行步骤和说明
为了打开order新增表单,index页面使用了三种方式其中第三个超连接涉及了order_input,当点击此超连接时。
1. 框架将这个和配置文件中的Logon_*映射相匹配起来;
2. method="{1}" 属性被method="input"替换;
3. 框架调用了OrderAction类的input方法;
4. 因为“input”在一个特殊的方法的列表中,所以验证框架将不会调用;
5. 默认的input方法返回一个“input”作为返回结果(input方法是从ActionSupport父类中的方法,本例重写了该input方法);
6. 框架展现“ordernew.jsp”来作为回应结果,没有带有任何的验证信息。
为了提交order新增表单,ordernew.jsp页面调用了OrderAction(OrderAction中的add业务)。
1. Struts2框架为目标OrderAction提供验证;
2. 找到OrderAction-validation.xml文件,框架为该类创建了一个验证对象,这个验证对象基于XML文件;
3. 验证器对输入的数据产生作用;
4. 如果验证失败,错误信息被添加到内部序列中;
5. 当所有的验证器都已经执行后,如果框架发现有错误信息产生,它寻找“input”结果对应的页面,而不调用OrderAction对象的业务方法add;
6. 如果通过验证,调用OrderAction对象的add方法,返回“success”对应的结果。
三.校验框架代码其它分析说明
1、如果点击index.jsp中的第二个超连接,那么会调用execute()方法,验证框架将会被调用,对展现的ordernew.jsp中表单输入框数据进行校验,这就会出现新增页面出现了,但验证失败的错误信息也在页面出现了(在新增页面形成的过程中,没来得及在新增页面的表单中输入数据就校验了),这不符合常理.
2、如果点击index.jsp中的第一个超连接,直接调用ordernew.jsp,就会在该页面报错,错误信息如下:
FreeMarker template error!
Method public java.lang.String com.opensymphony.xwork2.validator.validators.ValidatorSupport.getMessage(java.lang.Object) threw an exception when invoked on com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator@121e761
The problematic instruction:
----------
==> ${validator.getMessage(action)?js_string} [on line 50, column 26 in template/xhtml/form-close-validate.ftl]
in include "/${parameters.templateDir}/xhtml/form-close-validate.ftl" [on line 25, column 1 in template/xhtml/form-close.ftl]
----------
Java backtrace for programmers:
.......
原因是在校验配置文件OrderAction-validation.xml中我们使用了package.properties中消息键,该消息资源中的消息在不调用Action是不能使用的,只有调用Action,该页面对应的校验配置文件OrderAction-validation.xml才能使用了package.properties中消息键。所以直接调用ordernew.jsp是不行的
四.分析说明
&nbs
推荐文章 |
