框架Struts2第二天学习
Struts2_day02
1.1 今日内容
l Servlet的API的访问
l Result结果视图配置
l Struts2的数据封装
l 复杂类型数据的封装
l 完成客户的保存的操作
1.2 Struts2中的Servlet的API的访问
1.2.1 完全解耦合的方式访问Servlet的API
使用ActionContext对象中的方法访问Servlet的API
1.2.2 使用原生方式访问Servlet的API
使用ServletActionContext对象的中方法访问Servlet的API
1.2.3 实现某些接口的方式访问Servlet的API
使用实现特定的接口的方式访问Servlet的API
ServletRequestAware
ServletContextAware
1.3 Result的配置
1.3.1 结果页面的配置
1.3.1.1 全局结果页面
全局结果页面:针对一个包下的所有的Action的页面的跳转都可以生效。
<!--全局结果页面-->
<global-results>
<result >/demo1/success.jsp</result>
</global-results>
1.3.1.2 局部结果页面
局部结果页面:针对一个Action中的页面跳转生效。
<action name="requestDemo1"class="com.itheima.struts2.demo1.RequestDemo1Action">
<result>/demo1/demo2.jsp</result>
</action>
1.3.1.3 结果页面的类型
result标签的属性:
name:逻辑视图的名称。SUCCESS(默认值)
ERROR INPUT NONE LOGIN
type:页面跳转的类型。
* dispatcher :默认值。转发到某个JSP
* redirect :重定向到某个JSP
* chain :链。转发到某个Action
* redirectAction :重定向到某个Action
* stream :文件下载的时候用到。
1.4 Struts2的数据的封装
1.4.1 属性驱动
1.4.1.1 提供属性的set方法的方式
页面:
<h1>属性驱动方式一:提供属性的set方法的方式</h1>
<form action="${pageContext.request.contextPath
}/demo1.action" method="post">
用户名:<input type="text" name="username"/><br/>
密码:<input type="password" name="password"/><br/>
性别:<input type="radio" name="sex" value="男"/>男
<input type="radio" name="sex" value="女"/>女<br/>
爱好:<input type="checkbox" name="hobby" value="唱歌"/>唱歌
<input type="checkbox" name="hobby" value="喝酒"/>喝酒
<input type="checkbox" name="hobby" value="编码"/>编码<br/>
生日:<input type="text" name="birthday"/><br/>
<input type="submit" value="提交"/>
</form>
Action:
public class CustomerDemo1Action extends ActionSupport{
private Stringname;
private Integerage;
private Doublesalary;
private Datebirthday;
public void setName(Stringname)
{
this.name =name;
}
public void setAge(Integerage)
{
this.age =age;
}
public void setSalary(Doublesalary)
{
this.salary =salary;
}
public void setBirthday(Datebirthday)
{
this.birthday =birthday;
}
@Override
public String
execute() throws Exception
{
System.out.println(name);
System.out.println(age);
System.out.println(salary);
System.out.println(birthday);
return NONE;
}
}
1.4.1.2 页面使用表达式的方式
页面:
<h1>属性驱动方式二:表达式的方式</h1>
<form action="${pageContext.request.contextPath
}/demo2.action" method="post">
用户名:<input type="text" name="user.username"/><br/>
密码:<input type="password" name="user.password"/><br/>
性别:<input type="radio" name="user.sex" value="男"/>男
<input type="radio" name="user.sex" value="女"/>女<br/>
爱好:<input type="checkbox" name="user.hobby" value="唱歌"/>唱歌
<input type="checkbox" name="user.hobby" value="喝酒"/>喝酒
<input type="checkbox" name="user.hobby" value="编码"/>编码<br/>
生日:<input type="text" name="user.birthday"/><br/>
<input type="submit" value="提交"/>
</form>
Action:
public class CustomerDemo2Action extends ActionSupport{
//在Action中提供封装的对象的属性:提供该对象的set和get方法.
private Customer
customer;
//一定要有get
public Customer
getCustomer() {
return customer;
}
public void setCustomer(Customer
customer) {
this.customer
= customer;
}
@Override
public String
execute() throws Exception
{
System.out.println(customer);
return NONE;
}
}
1.4.2 模型驱动
1.4.2.1 模型驱动的方式(推荐)
页面:
<h1>数据封装方式三:模型驱动的方式</h1>
<form action="${
pageContext.request.contextPath }/customerDemo3.action" method="post">
姓名:<input type="text" name="name"/><br/>
年龄:<input type="text" name="age"/><br/>
工资:<input type="text" name="salary"/><br/>
生日:<input type="text" name="birthday"/><br/>
<input type="submit" value="提交">
</form>
Action:
public class CustomerDemo3Action extends ActionSupportimplements ModelDriven<Customer>{
private Customer
customer = new Customer(); //必须手动创建对象。
//模型驱动使用的方法:
@Override
public Customer
getModel() {
return customer;
}
@Override
public String
execute() throws Exception
{
System.out.println(customer);
return NONE;
}
}
1.4.3 数据封装类型转换的错误处理
<action name="demo1" class="cn.itcast.web.action.Demo1Action">
<result name="success">/success.jsp</result>
<result name="input">/demo1.jsp</result>
</action>
1.1 Result的配置
1.1.1 结果页面的配置
1.1.1.1 全局结果页面
全局结果页面:针对一个包下的所有的Action的页面的跳转都可以生效。
<!-- 全局结果页面 -->
<global-results>
<result >/demo1/success.jsp</result>
</global-results>
1.1.1.2 局部结果页面
局部结果页面:针对一个Action中的页面跳转生效。
<action name="requestDemo1" class="com.itheima.struts2.demo1.RequestDemo1Action">
<result>/demo1/demo2.jsp</result>
</action>
1.1.1.3 结果页面的类型
result标签的属性:
name:逻辑视图的名称。SUCCESS(默认值) ERROR INPUT NONE LOGIN
type:页面跳转的类型。
* dispatcher:默认值。转发到某个JSP
* redirect:重定向到某个JSP
* chain:链。转发到某个Action
* redirectAction:重定向到某个Action
* stream:文件下载的时候用到。
1.4.4 封装数据到集合中
以客户关系后台系统为例
1.4.5 添加客户思路分析:
1.4.6 修改客户回显数据--思路分析