struts2笔记(入门)(10)

2019-08-30 21:49

然后还需要在strust.xml中增加如下配置:

注意:name是固定值,而value来自于这个资源文件的基名。 最后在login.jsp中增加如下内容:

测试app级别资源文件

这样便完成了app级别的资源文件配置,随后发布测试。

说明:action级的资源文件优先级别最高,app最低。Pack级别的资源文件可作用于同一个包,app级别的资源文件可作用于当前项目。

补充:在jsp页面中直接访问某个资源文件,struts2为我们提供了i18n标签,使用此标签我们可以在类路径下直接从某个资源文件中获取国际化数据,而无需任何配置:

--xxx为类路径下资源文件的基名

而如果要访问的资源文件在类路径的某个包下(如action或package级别的资源文件),可以这样访问: --com.asm为包名 4.使用资源文件的原理

我们建立ReadResourceFileTest类,代码如下:

package com.asm;

import java.util.Locale;

import java.util.ResourceBundle; public class ReadResourceFileTest { }

补充:在Action类(必须继承自ActionSupport)中获取资源文件的值的方法,可以使用如下代码: String value = this.getText(\资源文件的键名\);

//获取资源文件的对应的值。如果想给资源文件中的占位符赋值,可以使用getText的重载方法。 ActionContext.getContext().put(\,value);//存放在request范围,供jsp获取此值

public static void main(String[] args) { }

ResourceBundle rb=ResourceBundle.getBundle(\, System.out.println(rb.getString(\));

Locale.US);

5.选择使用资源文件

其实在我们成功访问到login.jsp页面后,只要在地址栏中增加参数request_locale=en_US便可以正确切换到登录页面为英文。当然我们可以再链接根据此参数写这个资源文件的链接。当然我们也可借助一个新Action来实现,操作步骤如下:在login.jsp中增加如下代码:

change.action对应的配置为:

/login.jsp

46

ChangeLangAction的主要代码如下:

package com.asm;

public class ChangeLangAction extends ActionSupport { }

public String execute() throws Exception { }

return SUCCESS;

以上是第一种方法,特别要注意,由于使用了不同Action,所以要资源文件这时只有pack级别和app级别的才起作用,所以这时还应把action级别的资源文件内容增加到app级别的资源文件中去。下面使用第二种方法,原理基本和上面一样,只需在此ChangeLangAction中增加一个新的字段String lang及相应的get/set方法,再增加一个新的方法changeLang,代码如下:

public String changeLang() throws Exception {

Locale locale = null; System.out.println(lang); if (lang.equals(\)) { }

ActionContext.getContext().setLocale(locale); I18N_LOCALE\, locale);

}

/login.jsp

return SUCCESS;

ServletActionContext.getRequest().getSession().setAttribute(\

// 显示中文

locale = Locale.CHINA;

System.out.println(\ + lang+locale); // 显示英文

locale = Locale.US;

} else {

配置内容为:

在login.jsp中对应的链接为:

这样操作后,当我们成功访问到login.jsp后,便可以点击链接来随意切换访问英文或中文页面。

八、验证机制

注意:要想实现校验,action必须继承自ActionSupport类。 1.基于手工编码的校验

我们建立struts2validate项目 ,其中reg.jsp页面主要代码如下:

注册页面

47

写真实年龄\headerKey=\/>

说明:可以用来对验证信息进行一些美化效果处理,另在此页面中我们用到了一个AgeAction用来动态生成“年龄”表单项,在前面的表单标签中已用过类似的做法。AgeAction的代码如下: package com.asm;

public class AgeAction extends ActionSupport {

private Map ageMap; public AgeAction() { }

ageMap = new HashMap();

for (int i = 1; i <= 120; i++) { }

ageMap.put(new Integer(i), i + \);

...省略ageMap的get/set方法 }

Reg action的配置如下:

/regSuc.jsp /reg.jsp

根据配置,我们来看它的对应Action: RegAndLoginAction,代码如下: package com.asm;

public class RegAndLoginAction extends ActionSupport {

private User user;

public String reg() throws Exception {

if (user.getUsername() == null || user.getUsername().equals(\)) { this.addFieldError(\, \用户名不能为空\);

} else if (!Pattern.matches(\,

this.addFieldError(\, \用户名只能是以字母开头,后面可以跟字

user.getUsername())) {

母、数字或下滑线,长度只能是4-15位\); } else if (user.getPassword() == null || user.getPassword().equals(\)) {

this.addFieldError(\, \密码不能为空\);

} else if (!user.getPassword().equals(user.getPassword2())) {

48

this.addFieldError(\, \两次输入的密码不一致,请重新输入\); } else if (user.getAge() < 16) {

this.addFieldError(\, \未满16岁,不能注册\); }

if (this.hasFieldErrors()) { }

System.out.println(\); return SUCCESS;

return LOGIN;

}

...省略user的get/set方法 }

说明:当reg.jsp提交给此Action对应的reg方法处理时,它会调用addFieldError把错误信息加到FiledError中去,关于这点,我们可以在前台reg.jsp页面中用调试时,可以看到值栈中的此Action对象中的fieldErrors对应着我们添加的错误信息,因此这点也就为我们取出验证信息提供一个参考,即是说我们可以取出此验证信息,对它进行美化处理,而不是按struts2默认来显示。 后面,我们接着对登录页面用login方法进行了类似的验证(在此省略),所以此action取名为regAndLoginAction. 补充:当我们把login.jsp页面的验证写完后,可以发现reg和login这两个方法显示相当的繁琐,对此我们可以专门把验证分别放在validateReg和validateLogin方法中去。我们新建一个Action来演示,新的RegAndLogin2Action主要代码如下: package com.asm;

public class RegAndLogin2Action extends ActionSupport {

private User user; @Override

public void validate() {

System.out.println(\校验的统一出口,对所有方法进行校验:这里可以放一些公共的验证\); }

public void validateReg() { ...省略,对reg方法进行验证 }

public void validateLogin() { ...省略,对login方法进行验证 }

public String reg() throws Exception { }

public String login() throws Exception { }

49

System.out.println(\); return SUCCESS;

System.out.println(\); return SUCCESS;

...省略user的get/set方法 }

说明:当reg.jsp提交给此Action对应的reg方法处理时,它会首先调用此reg方法专属的验证方法

valiadteReg(注意取名规则:validate+方法名<首字母大写>),此方法验证完成后,会调用validate方法,此方法完成后才会调用reg方法。因此一般情况下,我们会把一些公共的验证放在validate方法中,而这些所有的验证方法也只进行验证处理,并把错误信息封装到fieldError字段中(或者其它字段)。reg这些真正执行的方法只进行一些其它处理(比如把注册信息写进数据库)。测试时需要修改把前面的配置注释掉,写上下面的配置:

/logSuc.jsp /login.jsp

/regSuc.jsp /reg.jsp

说明:配置中有一个input result的配置,因为带有validate的方法进行验证时,如果验证失败,会返回input所对应的result结果集。 简析校验流程:

(1)类型转换器请求参数执行类型转换,并把转换后的值赋给action中属性。 (2)如果在执行类型转换过程中出现异常,系统会将异常信息保存到ActionContext,conversionError拦截器将异常信息添加到fieldErrors里,不管类型转换是否出现异常都会进入第(3)步。 (3)系统通过反射技术调用action中的validateXxx()方法 (4)再调用action中的validate()方法

(5)经过上面4步,如果系统中的fieldErrors存在错误信息(即存放错误信息的集合size大于0),系统自动将请求转发至名为input的视图。如果系统中的fieldErrors没有任何错误信息,系统将执行action中的处理方法。

注意:经过以上过程的分析,可以知道如果类型转换失败,也会到input视图。 2.基于XML配置形式的校验

新建struts2validateXML项目,在此项目中,基本的代码和上面的struts2validate项目相似,只是在上一个项目中我们在Action的具体方法中进行了验证处理,现在先修改RegAndLoginAction的代码如下:

package com.asm;

public class RegAndLoginAction extends ActionSupport {

public String login() throws Exception { }

System.out.println(\); return SUCCESS;

public String reg() throws Exception { }

return SUCCESS;

System.out.println(\); private User user;

...省略user的get/set方法 }

下面我们在action所在的包下建立一个对此Action进行校验的xml文件,文件名为:

50


struts2笔记(入门)(10).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:11种蒙氏数学教具的使用方法 - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: