- 浏览: 26473 次
- 性别:
- 来自: 深圳
最新评论
关于Form
突出要求的是Form只是用来存表单数据,只是数据提供者。在这个层次中不要去访问模型层。在Form这块流程中,服务还未响应到response,所以,在其实现中只能传递mapping和request.
Sturts架构中的Action默认读取setXXXX,标签也默认读取getXXX所以,必须规范的实现,同时需使用reset方法来清空数据,如配置中使用 validate=true 那实现中也要编写此方法,其返回为ActionErrors。
使用的方法为:
1 设定各属性值的 getXXX();setXXX(Stirng XXX) 方法。
2 设定reset() 方法,将各属性置为null.
3 调用 public ActionErrors validate(ActionMapping mapping,HttpservletRequest request) 方法
ActionErrors errors = new ActionErrors()
一般来判断 XXX==null || xxx.length()<1是否空值来操作 errors.add("XXX",new ActionMessage("资源文件描述")
return erros
关于Action
Action只是个控制角色。它只是来判断模型及其它JAVA文件的计算结果来实现控制转向,不必要放入太多的固定的硬代码在里面。还是为了实现MVC的需要而严格的。这里调用模型层去完成持久化。在Action中如果计划向视图层传递对象时,必须使用setAttribute方法,而且建议此方法参数中的键值为另一对象(一个JAVA文件)的常量,这样也是为了方便控制。实现分离。
如:必须实现execute方法,在方法中再进行比Form简单验证更复杂的验证,实现持久化,然后转向。
使用的一些特殊的方法:
1。设定ActionMessages error = new ActionMessages();
2。根据逻辑判断使用 error.add(ActionMessages.GLOBAL_MESSAGE,new ActionMessage("配置文件"));
3。来判断error是否为空实现转向:
if(!errors.isEmpty()){
saveErrors(request,errors);
return new ActionForward(mapping.getInput());
}
同样可以使用一个特殊的方法 return new ActionForward("转发名","/地址","true")
第一个转发名代表实例的名字,第二是路径,第三个代表是重定向(false为转发)
struts 关于视图
<html:link forward="search"><bean:message key="mainMenu.search"/></html:link>
这转向代表向控制方要求转向动作:在配置文件 里有 <forward name="search" path="/search.jsp"/> 直接转向的说明。
另外可以使用 <html:link page="/action/viewsignin"> 这个代表要连接到<action>中去进行解析。一般action中的配置如下
<action
path="/viewsignin"
parameter="/page/view.jsp"
type="org.apache.struts.actions.ForwardAction"
scope="request"
name="loginForm"
validate="false"
input="/index.jsp">
</action>
<message-resources>的使用
<message-reseources key="images" parameter="imagesResources"/>
当调用时:<bean : message key="images.show " bundle="images"/>
struts 令牌 解决重复提交 :
首先:要在表单页的上一个控制页面,也就是说,如果想用表单提交时,要先利用sturts的转发机制,从一个action转到表单页,在这个转发action中,要定义一个“令牌” 很简单, saveToken(request);然后再由此ACTION转向到实际录入拥有FORM的页面,由此FORM页面再向下一个ACTION提交。(这时会在表单页自动生成一个hidden 保存了一个和时间相关的计算值)
其次 : 在表单提交后的action中,进行一个判断 if(isTokenValid(reqeust)) 如果表单提交的串值与session中的相符那就完成动作,同时session清空此串值(restToken(request);)。此时如果后退再提交,就出错,同时再次改写saveToken返回目的页,如录入或者主页面。
1 . <html:link page="/tokenaction.do?token=insertUser">用户注册</html:link>
2.<action path="/tokenaction" type="com.token.action.PreInsert" parameter="token">
<forward name="regUser" path="/reguser.jsp"></forward>
</action>
3. public class PreInsert extends DispatchAction {
public ActionForward insertUser(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
this.saveToken(request);
return mapping.findForward("regUser");
}
}
4.<html:form action="/reguser">
5. <action attribute="regForm" input="/reguser.jsp" name="regForm"
path="/reguser" scope="request"
type="com.token.struts.action.RegAction" validate="false" >
<forward name="mutiSubmit" path="/reguser.jsp"></forward>
</action>
6. RegAction类excute方法内
ApplicationResources.properties :error.mutiSubmit=<script>alert("you shouldn't submit form twice !");</script>
ActionMessages errors=new ActionMessages();
if(!this.isTokenValid(request)){
errors.add("mutiSubmit",new ActionMessage("error.mutiSubmit"));
this.saveErrors(request, errors);
return mapping.findForward("mutiSubmit");
}else{
this.resetToken(request);
……..
}
验证 (application.properties)
命令 native2ascii –encoding gbk f:\1.txt f:\2.txt
username=\u7528\u6237\u540d :
password=\u5bc6\u7801 :
name.error=<script>alert("\u7528\u6237\u540d\u4e0d\u80fd\u4e3a\u7a7a!");</script>
name.length=<script>alert("\u7528\u6237\u540d\u957f\u5ea6\u5fc5\u987b\u662f6-12\u4f4d!");</script>
pwd.error=<script>alert("\u5bc6\u7801\u4e0d\u80fd\u4e3a\u7a7a!");</script>
public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
ActionErrors errors = new ActionErrors();
if(username==null||username.equals("")){
errors.add("user",new ActionMessage("name.error"));
return errors;
}
if(username.length()<6||username.length()>12){
errors.add("userlength", new ActionMessage("name.length"));
request.setAttribute("usercheck",username);
return errors;
}
if(password==null||password.equals("")){
errors.add("pass",new ActionMessage("pwd.error"));
return errors;
}
return errors;
}
突出要求的是Form只是用来存表单数据,只是数据提供者。在这个层次中不要去访问模型层。在Form这块流程中,服务还未响应到response,所以,在其实现中只能传递mapping和request.
Sturts架构中的Action默认读取setXXXX,标签也默认读取getXXX所以,必须规范的实现,同时需使用reset方法来清空数据,如配置中使用 validate=true 那实现中也要编写此方法,其返回为ActionErrors。
使用的方法为:
1 设定各属性值的 getXXX();setXXX(Stirng XXX) 方法。
2 设定reset() 方法,将各属性置为null.
3 调用 public ActionErrors validate(ActionMapping mapping,HttpservletRequest request) 方法
ActionErrors errors = new ActionErrors()
一般来判断 XXX==null || xxx.length()<1是否空值来操作 errors.add("XXX",new ActionMessage("资源文件描述")
return erros
关于Action
Action只是个控制角色。它只是来判断模型及其它JAVA文件的计算结果来实现控制转向,不必要放入太多的固定的硬代码在里面。还是为了实现MVC的需要而严格的。这里调用模型层去完成持久化。在Action中如果计划向视图层传递对象时,必须使用setAttribute方法,而且建议此方法参数中的键值为另一对象(一个JAVA文件)的常量,这样也是为了方便控制。实现分离。
如:必须实现execute方法,在方法中再进行比Form简单验证更复杂的验证,实现持久化,然后转向。
使用的一些特殊的方法:
1。设定ActionMessages error = new ActionMessages();
2。根据逻辑判断使用 error.add(ActionMessages.GLOBAL_MESSAGE,new ActionMessage("配置文件"));
3。来判断error是否为空实现转向:
if(!errors.isEmpty()){
saveErrors(request,errors);
return new ActionForward(mapping.getInput());
}
同样可以使用一个特殊的方法 return new ActionForward("转发名","/地址","true")
第一个转发名代表实例的名字,第二是路径,第三个代表是重定向(false为转发)
struts 关于视图
<html:link forward="search"><bean:message key="mainMenu.search"/></html:link>
这转向代表向控制方要求转向动作:在配置文件 里有 <forward name="search" path="/search.jsp"/> 直接转向的说明。
另外可以使用 <html:link page="/action/viewsignin"> 这个代表要连接到<action>中去进行解析。一般action中的配置如下
<action
path="/viewsignin"
parameter="/page/view.jsp"
type="org.apache.struts.actions.ForwardAction"
scope="request"
name="loginForm"
validate="false"
input="/index.jsp">
</action>
<message-resources>的使用
<message-reseources key="images" parameter="imagesResources"/>
当调用时:<bean : message key="images.show " bundle="images"/>
struts 令牌 解决重复提交 :
首先:要在表单页的上一个控制页面,也就是说,如果想用表单提交时,要先利用sturts的转发机制,从一个action转到表单页,在这个转发action中,要定义一个“令牌” 很简单, saveToken(request);然后再由此ACTION转向到实际录入拥有FORM的页面,由此FORM页面再向下一个ACTION提交。(这时会在表单页自动生成一个hidden 保存了一个和时间相关的计算值)
其次 : 在表单提交后的action中,进行一个判断 if(isTokenValid(reqeust)) 如果表单提交的串值与session中的相符那就完成动作,同时session清空此串值(restToken(request);)。此时如果后退再提交,就出错,同时再次改写saveToken返回目的页,如录入或者主页面。
1 . <html:link page="/tokenaction.do?token=insertUser">用户注册</html:link>
2.<action path="/tokenaction" type="com.token.action.PreInsert" parameter="token">
<forward name="regUser" path="/reguser.jsp"></forward>
</action>
3. public class PreInsert extends DispatchAction {
public ActionForward insertUser(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
this.saveToken(request);
return mapping.findForward("regUser");
}
}
4.<html:form action="/reguser">
5. <action attribute="regForm" input="/reguser.jsp" name="regForm"
path="/reguser" scope="request"
type="com.token.struts.action.RegAction" validate="false" >
<forward name="mutiSubmit" path="/reguser.jsp"></forward>
</action>
6. RegAction类excute方法内
ApplicationResources.properties :error.mutiSubmit=<script>alert("you shouldn't submit form twice !");</script>
ActionMessages errors=new ActionMessages();
if(!this.isTokenValid(request)){
errors.add("mutiSubmit",new ActionMessage("error.mutiSubmit"));
this.saveErrors(request, errors);
return mapping.findForward("mutiSubmit");
}else{
this.resetToken(request);
……..
}
验证 (application.properties)
命令 native2ascii –encoding gbk f:\1.txt f:\2.txt
username=\u7528\u6237\u540d :
password=\u5bc6\u7801 :
name.error=<script>alert("\u7528\u6237\u540d\u4e0d\u80fd\u4e3a\u7a7a!");</script>
name.length=<script>alert("\u7528\u6237\u540d\u957f\u5ea6\u5fc5\u987b\u662f6-12\u4f4d!");</script>
pwd.error=<script>alert("\u5bc6\u7801\u4e0d\u80fd\u4e3a\u7a7a!");</script>
public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
ActionErrors errors = new ActionErrors();
if(username==null||username.equals("")){
errors.add("user",new ActionMessage("name.error"));
return errors;
}
if(username.length()<6||username.length()>12){
errors.add("userlength", new ActionMessage("name.length"));
request.setAttribute("usercheck",username);
return errors;
}
if(password==null||password.equals("")){
errors.add("pass",new ActionMessage("pwd.error"));
return errors;
}
return errors;
}
发表评论
-
杂乱的东西
2008-06-15 20:18 893... -
使用jad及eclipse插件进行.class文件的反编译
2008-06-06 22:54 1603[/color][color=white][color=dar ... -
Criteria
2008-03-14 10:19 2175[color=white][color=gray][color ... -
软件工程 与 软件测试
2007-12-20 14:25 1196[color=white]1﹑软件产品的特性 产品特性: ⑴ ... -
hql 查询
2007-12-20 14:22 1155[color=white][color=black][colo ... -
分页`
2007-12-20 14:19 1821[color=black][color=white] 分页sq ... -
dwr util.js 应用
2007-12-20 14:18 241[color=white]regcheck.js------- ... -
sql 应用
2007-12-20 14:09 1066[/color][color=white][color=bla ... -
java 与 读取 .properties文件
2007-12-20 14:08 1385sqlcon.properties配置文件 连接数据库 dri ... -
整合小结
2007-12-20 14:04 3265spring 与 struts 整合 有3 种方法 实质是 ... -
双向 一对多
2007-12-20 13:59 1950hibernate双向 一对多映射 : 双向一对多关联 , ... -
浅入冬眠
2007-12-20 13:56 1066Hibernate Configuration 正如其名, ... -
对struts的认识
2007-12-20 13:37 1578struts 概述: model 部分 : ... -
浅谈mvc
2007-12-20 13:35 1290mvc 的核心思想 : 把程序分成相对独立,而又能协同工作 ...
相关推荐
Struts1.x常用的开发包,需要学习struts1.x朋友可以下载
不同 struts2.dtd
struts1.x和struts2.x区别
Struts 2.x权威指南(第3版)
Struts2.3.15.1版本升级到2.3.32版本详细流程,可解决Struts 2远程执行代码漏洞
Struts2漏洞检查工具Struts2.2019.V2.3
基于java的开发源码-Struts验证码插件 JCaptcha4Struts2.zip 基于java的开发源码-Struts验证码插件 JCaptcha4Struts2.zip 基于java的开发源码-Struts验证码插件 JCaptcha4Struts2.zip 基于java的开发源码-Struts...
org.apache.struts2.dispatcher.FilterDispatcher
在这里,通过一个小例子稍微总结了下struts1和struts2的区别,希望这个能帮助到初学struts的朋友
struts 2.3.4.1 最新英文版API =========================================================== 概览 程序包 类 使用 树 已过时 索引 帮助 上一个 下一个 框架 无框架 所有类 ------------------------------------...
Struts分页.这里帮忙讲述了Struts分页.分页 然后对比其他java分页的话更为简单
Struts2.3.1.1 docs. 自己亲自动手生成的,借用了jd2chm,在看struts视频时顺便就做了这个版本的。有一个类:ToolboxManager,没有包括,因为出现了找不到包的问题。
新鲜的,struts2.3.1.1 帮助文档! 谢谢大家下载!Okok!第一次传东西!
struts2.5.14.1所需的最少的8个jar包以及日志核心包log4j-core-2.9.1.jar
学着制作了一个struts2的chm文档,觉得挺好玩的,分享给爱学习的童鞋,也留在csdn做个备份。
Struts2.chm,StrutsAPI.chm,Struts帮助文档.chm三个文档
freemarker与struts 1.x 结合,生成html 在http://blog.csdn.net/chen1255 的web中有详细描述关于freemarker与struts1.x的结合
java Struts 1.x 框架 Web 开发 java Struts 1.x 框架 Web 开发
[Struts2.0.14.API].Struts2.0.14.API 英文版
Struts1.x的登录示例,Struts1.x相关详细教程参考我的Blog:http://blog.csdn.net/boyazuo