struts标签

form表单标签

Action:请求地址。直接写动作名称,不用写contextPath

<s:form action="/user/register.action">

method:请求方式,默认是post请求,可以不用写

enctype:静音编码的MIME类型

Struts2-表单验证-服务端Action验证

struts自带表单字段验证

第一种:重写validate方法,如果数据不对,可以往FieldError添加错误信息

public void validate() {
//判断用户名是否为null
if(StringUtils.isEmpty(user.getUsername())) {
addFieldError("username","用户名不能为null");
}
} //一旦FiledError有数据就不会执行register方法
public String register(){
System.out.println("register....");
System.out.println(user); return NONE;
}

注意:表单一定要与struts标签结合使用表单验证才会有效:

在进行表单提交的时候会优先调用validate方法,如果FieldError有错误信息就不会执行其他方法。对于action来说validate方法是全局的

package com.gyf.web.action;

import com.gyf.service.IUserService;
import com.gyf.service.impl.UserServiceImpl; import org.apache.commons.lang3.StringUtils; import com.gyf.model.User;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven; public class UserAction extends ActionSupport implements ModelDriven<User> { private User user = new User();
@Override
public User getModel() {
return user;
} public String register(){
System.out.println("register....");
System.out.println(user); return NONE;
} public String list() {
return "list";
}
@Override
public void validate() {
System.out.println(user.getUsername());//直接通过action访问list时打印为null
//判断用户名是否为null
if(StringUtils.isEmpty(user.getUsername())) {
addFieldError("username","用户名不能为null");
}
}
}

现在通过action来访问jsp页面出错,因为FieldError有数据,所以不执行list方法

现在使用注解的方式,使用list方法时来跳过执行validate方法

@SkipValidation
public String list() {
return "list";
}

跳过了validate方法的执行,可以正常访问list,证明了validate方法时具有全局性的

struts2-表单验证-xml声明式验证

全局声明方式

1.在action包中声明UserAction-validation.xml文件格式类名-U-validation.xml

2.这种方式配置是全局配置,所有action的方法都会拦截验证

3.如果其他方法不想验证,可配置@SkipValidation注解

4.dtd约束可以在xwork-core的jar包中找

局部声明方式

在action包中声明UserAction-register-validation.xml文件,声明格式Action 类名-方法名-validation.xml

Struts2的国际化

软件的国际化:要使他能同时应对世界不同地区和国家的访问。并针对不同地区和国家的访问,提供相应的,符合来访者阅读习惯的页面或数据

创建一个消息资源包

一个资源包由多个文件组成,这些文件名都有命名规范:主要文件名_语言代码_国家代码.properties

语言代码和国家代码:有iso规定的

当文件只有主要文件名.properties时,表明他是默认资源包。浏览器会根据不同的语言环境找对应语言环境的资源包

当没有时,找默认的

每个资源包的内容都由相同的key和对应语言环境value组成

读取国际化资源文件

package com.gyf.test;

import java.util.Locale;
import java.util.ResourceBundle; import org.junit.Test; public class I18NTest {
@Test
public void test1() {
//默认读取的是中文
//ResourceBundle rb = ResourceBundle.getBundle("resources.message");//包名加文件名
//指定读取某个国家
ResourceBundle rb = ResourceBundle.getBundle("resources.message",Locale.US);
System.out.println(rb.getString("login.username"));
System.out.println(rb.getString("login.password"));
System.out.println(rb.getString("login.submit"));
}
}

Struts的国际化

配置资源包

读取资源包

最新文章

  1. edge 浏览器中数字显示为链接
  2. iOS 基础控件(下)
  3. mongodb启动后台服务
  4. QFile文件操作-QT
  5. Zend 安装 OpenExplorer插件
  6. Codeforces Round #338 (Div. 2) C. Running Track dp
  7. MyEclipse启动和运行速度优化
  8. html + ashx 实现Ajax省市联动
  9. var 的用法
  10. java.util.concurrent.atomic 类包详解
  11. 迟到的 WPF 学习 &mdash;&mdash; 依赖项属性
  12. geom设置—条形图
  13. 分区表SQL调优/优化(Tuning)时容易“被欺骗”的场景之一
  14. Session与Cookie(自定义Session)
  15. sql 50题
  16. Shell脚本学习-数组
  17. httpService 和 WebService接口协议
  18. jvm高级特性(4)(内存分配回收策略)
  19. python学习笔记09-python编码与解码
  20. java面试资源(面试题、面试经验等)

热门文章

  1. 使用composer下载依赖包下载失败的解决方法
  2. nginx代理mysql
  3. 【caffe Net】使用举例和代码中文注释
  4. RabbitMQ入门学习系列(七) 远程调用RPC
  5. html5的source元素
  6. postgresQL 服务器端守护进程
  7. vue报错:There are multiple modules with names that only differ in casing.
  8. 在dubbo工程中,使用druid监控
  9. kotlin单个文件及文件夹复制例子
  10. Java socket详解