框架Struts2第二天学习

本文介绍Struts2框架中数据封装的方法及页面跳转配置,涵盖属性驱动、模型驱动等数据处理方式,并解析不同类型的页面跳转如何实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Struts2_day02

1.1 今日内容

l Servlet的API的访问

Result结果视图配置

Struts2的数据封装

l 复杂类型数据的封装

l 完成客户的保存的操作

1.2 Struts2中的ServletAPI的访问

1.2.1 完全解耦合的方式访问ServletAPI

使用ActionContext对象中的方法访问Servlet的API

 

 

 

1.2.2 使用原生方式访问ServletAPI

使用ServletActionContext对象的中方法访问Servlet的API

 

 

1.2.3 实现某些接口的方式访问ServletAPI

使用实现特定的接口的方式访问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.csq.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中提供封装的对象的属性:提供该对象的setget方法.

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="com.csq.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.csq.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 修改客户回显数据--思路分析

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值