Struts2(三)

1.输入校验


1).需求

Paste_Image.png

2).输入校验(对用户输入的数据做合法的判断):

  • 1.客户端校验: 过滤正常用户的误操作,通过JS代码完成(可以绕开).

  • 2.服务端校验: 整个应用阻止非法数据的最后防线(必须),使用Java代码.

  • 3.数据库校验: 数据表的列有约束.

3).Struts2校验方式:

  • 1.代码方式校验:开发中常用;

  • 2.配置校验:

    • 2.1.基于XML配置校验(推荐使用)。

    • 2.2.基于Annotation配置校验。

4).在Action中如何做校验:

方法:

  • 要继承ActionSupport.
  • 覆盖Validateable接口中的validate()方法 ,在该方法中完成验证

步骤如下:

  • 1.validate()方法在其他的Action方法之前执行

  • 2.验证出错转向的页面

                       struts.xml配置<result name="input">/validate/login.jsp</result>   
    
                       其中input转向是在action中已经定义好的.
    
                       public static final String INPUT = "input";                  
    
                     什么时候表示验证出错(转向input所指向的页面)
    
                       *  super.addFieldError("字段名称", "错误信息");
    
                       *  当集合不为空时,转向错误页面.
    
                       *  若校验失败,不会再执行Action中的业务方法.
    
Paste_Image.png
Paste_Image.png

5).出现的问题

  • 问题1:为什么在执行input方法之前,没有执行validate方法.

在validation和workflow拦截器中配置了excludeMethods参数.告诉拦截器,要忽略方法名称为:input,back,cancel,browse的方法.

Paste_Image.png
  • 问题2.为什么校验失败,默认跳转到input结果视图.

在workflow拦截器中,默认跳转视图就是input(看下图).

Paste_Image.png
  • 问题3:Action中某些方法不需要校验,却也执行了validate方法,如何避免问题.

在不需要校验的方法之上,使用标签:@SkipValidation.

  • 问题4.开发中在一个Action中,校验的方法是少数,大多数方法都不需要校验.

    • 解决方案1:在其他方法上都贴@SkipValidation标签.(很烦)
    • 解决方案2:只针对于需要校验的方法做检验.
      编写方法: public void validateXxx(){}:此时该方法只对xxx方法做校验.
      比如: public void validateSave()针对于save方法.
  • 问题5:从workflow的拦截可以看出,校验失败会跳到默认的结果视图("input").
Paste_Image.png

使用标签:@InputConfig(resultName="edit"),注意该注解贴在被校验方法之上,而不是校验方法.

  • 问题6.错误信息提示丑陋.

2.Struts2国际化


1).准备国际化资源文件:基本名词:app

中文:app_zh_CN.properties

英文:app_en_US.properties

2).告诉Struts2框架:国际化资源文件叫什么名字.

<constant name="struts.custom.i18n.resources" value="app"/>

3).准备国际化的login.jsp

在JSP中,获取指定的国际化信息:(先引入Struts2的标签库)
<s:text name="资源文件中的key"/>

Paste_Image.png

4).若要让Action支持国际化,那么Action必须继承ActionSupport或者ActionSupport的子类.

5).在Action中获取资源信息:

通过ActionSupport类中的:
String getText(String name,String[] args);

参数:

名字 意义
name 表示资源文件中的key
args 资源文件中指定key占位符的真实值.

返回:拼接好的一个国际化信息.

Paste_Image.png

3.文件上传


1).文件上传准备:

2).注意:

 1):表单必须使用POST方式提交;
 2):使用二进制编码.multipart/form-data
 3):<input type="file" name=""/>
Paste_Image.png
Paste_Image.png

3).default.properties

struts.multipart.parser=jakarta : 设置在Struts2中使用哪一种上传组件

struts.multipart.saveDir= : 设置临时文件的保存路径(不要设置),默认就在Tomcat下.

struts.multipart.maxSize=2097152 : 设置一次请求的最大值,单位字节. 默认是2M

4).异常处理:

  • 1.格式不正确:

    默认情况下,Struts2框架没有设置允许的上传类型. 需要我们自己来配置允许的文件拓展名.

    fileUpload拦截器默认没有配置.

    解决方案:重新引用fileUpload拦截器,并配置允许的拓展名.


    Paste_Image.png
  • 2.文件过大:
    问题:上传失败之后,提示信息看不懂.
    解决方案:把提示信息作出国际化.支持中文.
    提示信息都在struts-messages.properties 文件里预定义. (org.apache.struts2包下)
    在struts.xml中引用资源文件:
    <constant name="struts.custom.i18n.resources" value="fileuploadMsg"/>

Paste_Image.png

4.文件下载


struts2提供了stream结果类型,该结果类型就是专门用于支持文件下载功能的。
(阅读stream结果集代码)
指定stream结果类型 需要指定一个 inputName参数,该参数指定一个输入流,提供被下载文件的入口

Paste_Image.png

5.Struts标签


表单标签将在 HTML 文档里被呈现为一个表单元素

1).使用表单标签的优点:

表单回显
对页面进行布局和排版

2).引用标签库:

<%@ taglib uri="/struts-tags" prefix="s"%>

3).Struts2标签:

  • 通用标签
    • 控制标签
    • 数据标签
Paste_Image.png
  • 表单标签
Paste_Image.png

通用标签:

1):控制流程标签:if-else if-else.

Paste_Image.png

2):其他的标签:默认会带上上下文路径和action的拓展名.

Paste_Image.png
Paste_Image.png
Paste_Image.png

6.Struts+JDBC的CRUD


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,377评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,390评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,967评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,344评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,441评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,492评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,497评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,274评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,732评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,008评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,184评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,837评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,520评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,156评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,407评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,056评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,074评论 2 352

推荐阅读更多精彩内容