马士兵struts2视频笔记--第二天

7、通配符的使用    
    7.1 index.jsp
    7.2 struts.xml
8、接收参数的三种方法 
    8.1 用Action的属性接收参数  
        8.1.1 index.jsp中超链接使用action属性接收参数
        8.1.2 UserAction.java中接收    
    8.2 用DomainModel接收参数(最常用)   
        8.2.1 index.jsp 
        8.2.2 struts.xml    
        8.2.3 UserAction.java   
        8.2.4 User.java(新增文件)   
    8.3 用ModelDriven接收参数    
        8.3.1 index.jsp和第一种传值一样。    
        8.3.2 UserAction.java   
9、中文乱码问题    
10、简单数据校验   
    10.1 添加验证   
    10.2 处理反馈信息 
    10.3 struts.xml 

7、通配符的使用

当类中方法的数量比较多时,方法中返回不同字符串,struts.xml中需要配置不同的。使用通配符时,可以最大程度的减少配置,新建action和返回时的界面时,按照约定好的规则起名,配置文件不需要变更。

7.1 index.jsp


<%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding="GB18030"%>

<% String context = request.getContextPath(); %>





Insert title here


使用通配符,将配置量降到最低
添加学生 删除学生
不过,一定要遵守"约定优于配置"的原则
添加老师 删除老师 添加课程 删除课程

注:前两个超链接’Studentadd’、’Studentdelete’中’Student’后面的部分对应通配符.

7.2 struts.xml





    
    
        
            /Student{1}_success.jsp
        
        
        
            /{1}_{2}_success.jsp
            
        
    

注:①第一个action中,{1}对应第一个通配符’*’,比如在index.jsp中点击添加学生,tomcat查询struts.xml,其中*对应add{1} 相当于add,动态拼接为字符串。
②第二个action中,’{1}’,’{2}’对应两个’*’,点击’index.jsp’中的删除老师时,访问的action等价于


            /Teacher_delete_success.jsp

8、接收参数的三种方法

8.1 用Action的属性接收参数

8.1.1 index.jsp中超链接使用action属性接收参数

添加用户

8.1.2 UserAction.java中接收

package com.bjsxt.struts2.user.action;

import com.opensymphony.xwork2.ActionSupport;

public class UserAction extends ActionSupport {
    
    private String name;
    private int age;
    
    public String add() {
        System.out.println("name=" + name);
        System.out.println("age=" + age);
        return SUCCESS;
    }

    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;
    }
}

8.2 用DomainModel接收参数(最常用)

与第一种相比,只是将属性封装到User类中,即model。

8.2.1 index.jsp


<%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding="GB18030"%>

<% 
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>






Insert title here

 

使用Domain Model接收参数添加用户
    


8.2.2 struts.xml





    
    
        
        
            /user_add_success.jsp
        
    

8.2.3 UserAction.java

package com.bjsxt.struts2.user.action;

import com.bjsxt.struts2.user.model.User;
import com.opensymphony.xwork2.ActionSupport;

public class UserAction extends ActionSupport {
    
    private User user;//传值时不需要生成user对象,struts会自动调用构造器
    
    public String add() {
        System.out.println("name=" + user.getName());
        System.out.println("age=" + user.getAge());
        return SUCCESS;
    }

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }
    
}

8.2.4 User.java(新增文件)

package com.bjsxt.struts2.user.model;

public class User {
    private String name;
    private int age;
    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;
    }
}
马士兵struts2视频笔记--第二天_第1张图片
图8-1 用DomainModel接收参数.png

8.3 用ModelDriven接收参数

8.3.1 index.jsp和第一种传值一样。


<%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding="GB18030"%>

<% 
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>






Insert title here

 
使用ModelDriven接收参数添加用户
    


8.3.2 UserAction.java

package com.bjsxt.struts2.user.action;

import com.bjsxt.struts2.user.model.User;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

public class UserAction extends ActionSupport implements ModelDriven{
    //需要自己手动创建对象
    private User user = new User();
    
    public String add() {
        System.out.println("name=" + user.getName());
        System.out.println("age=" + user.getAge());
        return SUCCESS;
    }

    @Override
    public User getModel() {
        return user;
    }
    
}

其他文件和之前的一样。

马士兵struts2视频笔记--第二天_第2张图片
图 8-2用ModelDriven接收参数.png

9、中文乱码问题

** ①方法一:过滤器**
web.xml中配置过滤器为老版本的过滤器


        org.apache.struts2.dispatcher.FilterDispatcher

②方法二:直接更改编码

  • jsp文件前加上
    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false"%>
    同时,struts.xml文件中指定解码类型


    解决get传值乱码的方法:修改tomcat配置文件server.xml

10、简单数据校验

10.1 添加验证

由8.1项目的基础上改进而来。在8.1.2 UserAction.add()方法里加上验证

if(name == null || !name.equals("admin")) {
            this.addFieldError("name", "name is error");
            this.addFieldError("name", "name is too long");
            return ERROR;
}

注:这里addFieldError可以将错误信息反馈到前端(传统servlet中有request和response,但是struts中的action没有这两个对象)。

10.2 处理反馈信息

使用addFieldError方法和s:fieldError标签简单处理数据校验


<%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding="GB18030"%>
<%@taglib uri="/struts-tags" prefix="s" %>




Insert title here


    User Add Error!错误信息的两种取法s:fielderror  
    
    
s:property

10.3 struts.xml





    
    
        
            /user_add_success.jsp
            /user_add_error.jsp
        
    

马士兵struts2视频笔记--第二天_第3张图片
图10-1 运行结果.png

马士兵struts2视频笔记--第一天
马士兵struts2视频笔记--第二天
马士兵struts2视频笔记--第三天

你可能感兴趣的:(马士兵struts2视频笔记--第二天)