struts2---验证框架的简单例子及其疑问
来源:互联网 发布:形容网络不好的说说 编辑:程序博客网 时间:2024/06/07 05:57
验证Action
public class QuizAction extends ActionSupport {private static final long serialVersionUID = 1L;String name;int age;String answer;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getAnswer() {return answer;}public void setAnswer(String answer) {this.answer = answer;}private boolean isInvalid(String value) {return (value == null || value.length() == 0);}public String execute() throws Exception {if (isInvalid(getName())) {//this.addFieldError("name", "name can't empty!");return INPUT;}return SUCCESS;}
<validators> <field name="name"> <field-validator type="requiredstring"> <message>You must enter a name</message> </field-validator> </field> <field name="age"> <field-validator type="int"> <param name="min">13</param> <param name="max">19</param> <message>Only people ages 13 to 19 may take this quiz</message> </field-validator> </field></validators>
<body><s:form method="post" namespace="/" action="QuizAction"><s:textfield label="Name" name="name"/><s:fielderror fieldName="name"/> <s:textfield label="Age" name="age" /><s:textfield label="Favorite color" name="answer" /><s:submit/></s:form></body></html>
Struts.xml配置
<struts><include file="struts.xml" /><constant name="struts.custom.i18n.resources" value="actions.resources" /><package name="zx.action" namespace="/" extends="struts-default"><action name="QuizAction" class="zx.action.QuizAction"><result name="success">/reg_success.jsp</result><result name="input">/reg.jsp</result></action></package></struts>
总结:
1.显示错误信息。
看了官方文档,简单的例子并没有烦恼显示错误信息,在xml中配置了massage这个属性,实践中在页面中却并无显示,
查了百度有人说使用<s:fielderror fieldName="name"/> 这个标签,手工显示,如果我每个错误信息都这么手工,那validateXML中这个message有什么卵用。
显然不知道这里哪里配置的问题还是怎么的。就是不显示。。醉了。
而且即使我加上了这个标签,也没显示错误信息,我也是醉了。目前正在寻找原因中,能快点水落石出是最好啦。
还有一种显示错误信息方式就是代码显示 在Action中:this.addFieldError("name", "name can't empty!");
这个最搞扯,同时用标签加代码,就会显示两遍错误信息,说明这个标签它是有用的,只是不造自己哪里没写好而已。妈蛋。
这里关于这两种手工显示错误信息的方式:可以参考这位大大的:http://blog.csdn.net/luckygll/article/details/6696760
虽然也比较简单和简陋,将就看吧。官网文档也还没找到这个标签的具体详情,ORZ,英文Low,好难过,目前正在努力寻找中。
2.在jsp页面s:form表单中加上validate属性
表示自己最开始是这么写的:<s:form method="post" namespace="/" action="QuizAction" validate="true">
然后开始报错。一个超级大黄色的页面出现:错误代码如下:
FreeMarker template error!
Method public java.util.List org.apache.struts2.components.Form.getValidators(java.lang.String) threw an exception when invoked on org.apache.struts2.components.Form@1bb1dd2The problematic instruction:----------==> list tag.getValidators("${tagName}") as validator [on line 46, column 9 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:----------freemarker.template.TemplateModelException: Method public java.util.List org.apache.struts2.components.Form.getValidators(java.lang.String) threw an exception when invoked on org.apache.struts2.components.Form@1bb1dd2at freemarker.ext.beans.SimpleMethodModel.exec(SimpleMethodModel.java:130)at freemarker.core.MethodCall._getAsTemplateModel(MethodCall.java:93)at freemarker.core.Expression.getAsTemplateModel(Expression.java:89)at freemarker.core.IteratorBlock.accept(IteratorBlock.java:94)at freemarker.core.Environment.visit(Environment.java:221)at freemarker.core.IteratorBlock$Context.runLoop(IteratorBlock.java:167)at freemarker.core.Environment.visit(Environment.java:428)at freemarker.core.IteratorBlock.accept(IteratorBlock.java:102)at freemarker.core.Environment.visit(Environment.java:221)at freemarker.core.MixedContent.accept(MixedContent.java:92)at freemarker.core.Environment.visit(Environment.java:221)at freemarker.core.ConditionalBlock.accept(ConditionalBlock.java:79)at freemarker.core.Environment.visit(Environment.java:221)at freemarker.core.MixedContent.accept(MixedContent.java:92)at freemarker.core.Environment.visit(Environment.java:221)at freemarker.core.Environment.include(Environment.java:1508)at freemarker.core.Include.accept(Include.java:169)at freemarker.core.Environment.visit(Environment.java:221)at freemarker.core.MixedContent.accept(MixedContent.java:92)at freemarker.core.Environment.visit(Environment.java:221)at freemarker.core.Environment.process(Environment.java:199)以下省略...
解决方案 如下 :
<s:form method="post" namespace="/" action="QuizAction.action" validate="true">
给action补充后缀.action即可解决这个问题
应该是不合符拦截器模板的问题 (个人猜测)
3.struts2在提交<s:form>表单时,namespace报错
最开始我是<s:form method="post" action="QuizAction">这样子的
虽然无伤大雅,但是总会提示 :No configuration found for the specified action: 'Quit' in namespace: '/jsp/weekly'. Form action defaulting to 'action' attribute's literal value. (抱歉我懒惰,直接把大大的错误代码复制过来了。)
看着也烦心:参考了这位大大的方法:大大链接:http://www.cnblogs.com/Jesuca/archive/2011/07/19/2110739.html
加一个 namespace="/"即可
4.关于校验框架的运行原理:
参考大大:http://blog.csdn.net/woshisap/article/details/7300907
比较详细易懂
- struts2---验证框架的简单例子及其疑问
- Struts2中使用验证框架的简单例子
- Struts2框架验证及其国际化
- 搭建Struts2框架的简单例子
- struts2 客户端验证+服务端验证 简单例子
- struts2的验证框架
- struts2的框架验证
- struts2 的验证框架
- Struts2的验证框架
- struts2的验证框架
- struts2的框架验证 .
- struts2的验证框架
- Struts2的简单例子
- 使用Struts1.2 Validator验证框架的简单例子
- java Struts2 框架的搭建与简单的登录验证
- Struts2 验证框架的应用
- struts2的验证框架不起作用
- struts2的Validator验证框架
- MySQL——存储过程
- easyUI学习记录
- HDU 5480 Conturbatio
- 点击苹果模拟器触发事件
- Keil μVision5和Sublime Text2中文乱码
- struts2---验证框架的简单例子及其疑问
- mySql and与or的使用
- 浩杰兄给的好网站链接,收藏收藏
- 01_数组
- 剑指 offer:二叉搜索树的后序遍历序列
- php array_push 与 $arr[]=$value 性能比较
- 斯坦福iOS7 2013-2014秋Assignment 6的一种答案 #1
- iOS之UI随笔-UIButton与UIImageView
- 运算符小记