文档库 最新最全的文档下载
当前位置:文档库 › 第八章 Struts2标签库 (上机)

第八章 Struts2标签库 (上机)

第8章

Struts2标签库

上机内容:

1. OGNL语法

2.数据访问标签

3.控制标签

4. 表单标签

5. 非表单标签

上机目标:

1. 掌握OGNL语法,能使用OGNL访问业务逻辑处理数据

2. 掌握Struts2标签库中数据访问标签、控制标签、表单标签和非表单标签的使用方法

阶段1:指导

训练内容

1.OGNL语法

2.表单标签

3.数据访问标签

4.控制标签

5.非表单标签

需求说明

让用户输入客户编号,查找对应的客户是否存在。不存在则输出找不到此客户提示,找

到则可进一步显示该客户的订单信息。

实现思路

创建用于描述订单的实体类,命名为Order.java,代码如下:

public class Order

{

private String orderId;//订单id

private Date orderDtm;//订单日期

private int state;//订单状态 0:禁用1:启用

//无参构造函数

public Order()

{

}

//有参构造函数

public Order(String orderId, Date orderDtm, int state) {

super();

this.orderId = orderId;

this.orderDtm = orderDtm;

this.state = state;

}

//getter、setter方法省略…

}

创建用于描述客户的实体类,命名为Cust.java,代码如下:

public class Cust

{

private String custId;//客户编号

private String custName;//客户姓名

private String tel;//联系方式

private List orders=new ArrayList();//订单集合

//无参构造函数

public Cust()

{

}

//有参构造函数

public Cust(String custId, String custName, String tel) {

super();

this.custId = custId;

this.custName = custName;

this.tel = tel;

}

//getter、setter方法省略…

}

创建用于处理业务逻辑的JavaBean,命名为CustService.java,代码如下:public class CustService

{

private static List custList=new ArrayList();//定义客户列表

//静态构造器,初始化客户、订单信息

static

{

try

{

//定义SimpleDateFormat实例,以格式化日期

SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");

//创建c1客户

Cust c1=new Cust("C001","张三","110");

Order c1Order1=new Order("OR001",sdf.parse("2010-01-21"),0);

Order c1Order2=new Order("OR002",sdf.parse("2010-01-22"),0);

Order c1Order3=new Order("OR003",sdf.parse("2010-01-23"),1);

//添加订单到c1客户中

c1.getOrders().add(c1Order1);

c1.getOrders().add(c1Order2);

c1.getOrders().add(c1Order3);

//创建c2客户

Cust c2=new Cust("C002","李四","114");

Order c2Order1=new Order("OR004",sdf.parse("2010-01-24"),0);

Order c2Order2=new Order("OR005",sdf.parse("2010-01-25"),0);

Order c2Order3=new Order("OR006",sdf.parse("2010-01-26"),1);

//添加订单到c2客户中

c2.getOrders().add(c2Order1);

c2.getOrders().add(c2Order2);

c2.getOrders().add(c2Order3);

//创建c3客户

Cust c3=new Cust("C003","王五","119");

Order c3Order1=new Order("OR007",sdf.parse("2010-01-27"),0);

Order c3Order2=new Order("OR008",sdf.parse("2010-01-28"),0);

Order c3Order3=new Order("OR009",sdf.parse("2010-01-29"),1);

//添加订单到c3客户中

c3.getOrders().add(c3Order1);

c3.getOrders().add(c3Order2);

c3.getOrders().add(c3Order3);

//将客户添加到List列表中

custList.add(c1);

custList.add(c2);

custList.add(c3);

}catch(Exception e)

{

e.printStackTrace();

}

}

//根据客户id,查找客户的方法

public static Cust findCustById(String custId)

{

//循环各个客户

for(Cust cust:custList)

{

//如果找到

if(cust.getCustId().equals(custId))

{

return cust;

}

}

//找不到返回空

return null;

}

//根据客户id,取出该客户所有订单

public static List getCustOrders(String custId)

{

//循环各个客户

for(Cust cust:custList)

{

//如果找到

if(cust.getCustId().equals(custId))

{

//返回对应客户的订单信息

return cust.getOrders();

}

}

//找不到返回空

return null;

}

}

创建用于处理业务逻辑的控制器Action,命名为CustAction .java 代码如下:public class CustAction extends BaseAction

{

private String custId;//封装用户的客户Id

public String findOrder() throws Exception

{

//调用业务层,得到客户编号

List orderList=CustService.getCustOrders(custId);

//将订单存储到request范围中

this.getRequest().put("orderList", orderList);

return "input";//返回到input逻辑视图

}

public String execute() throws Exception

{

//调用业务逻辑

Cust cust=CustService.findCustById(custId);

if(cust!=null)

{

//将cust存储到session范围内

this.getSession().put("cust", cust);

}

else

{

//否则给msg赋值,准备弹出对话框

this.getRequest().put("msg","");

}

return "input";//返回到input逻辑视图

}

//getter、setter方法

public String getCustId() {

return custId;

}

public void setCustId(String custId) {

this.custId = custId;

}

}

创建一个JSP页面,命名为jd1.jsp,代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<%@ taglib uri="/struts-tags" prefix="s" %>

完成客户查找功能:


客户编号:


编号:${cust.custId }

姓名:${cust.custName }

联系方式:${cust.tel }

href="cust!findOrder.action?custId=${cust.custId }">察看订单



订单编号订单日期订单状态
${row.orderId }${row.state==0?"禁用":"启用" }

${msg }

配置struts.xml文件,代码如下:

/jd1.jsp

运行jd1.jsp页面,效果如图2.8.1所示:

图2.8.1 运行jd1.jsp页面

在图2.8.1中,输入要查找的客户编号,若客户编号存在,系统会显示该客户对应的详细信息,如图2.8.2所示:

图2.8.2 查找客户并显示详细信息

在图2.8.2中,单击”察看订单“按钮,系统会显示该客户对应的订单信息,如图2.8.3所示:

图2.8.3 显示客户订单信息

练习

需求说明

使用OGNL语法、数据标签、控制标签显示购物车商品信息,如图2.8.4所示:

图2.8.4 显示购物车商品

实现思路

创建用于描述商品信息的实体类,命名为shopInfo.java,代码如下:

public class ShopInfo

{

private String shopId;//商品编号

private String shopName;//商品名称

private double price;//商品单价

//无参构造函数

public ShopInfo()

{

}

//有参构造函数

public ShopInfo(String shopId, String shopName, double price) {

super();

this.shopId = shopId;

this.shopName = shopName;

this.price = price;

}

//getter、setter方法省略…

}

创建用于描述购物车项的实体类,命名为cartItem.java,代码如下:

public class CartItem

{

private ShopInfo shop;//商品对象

private int quantity;//商品数量

//无参构造函数

public CartItem()

{

}

//有参构造函数

public CartItem(ShopInfo shop, int quantity) {

super();

this.shop = shop;

this.quantity = quantity;

}

//getter、setter方法省略…

}

创建产生购物车的工厂类,命名为CartFactory.java,代码如下:

public class CartFactory

{

//实例化一个购物车工厂

private static CartFactory carFactory=new CartFactory();

private CartFactory()//工厂方法,构造方法私有

{

}

public static CartFactory newInstance()//实例化自己

{

return carFactory;

}

public Map createCar() //创建购物车

{

Map car=new HashMap();

//构造商品

ShopInfo shopInfo1=new ShopInfo("S001","手机",500);

ShopInfo shopInfo2=new ShopInfo("S002","电视",700);

ShopInfo shopInfo3=new ShopInfo("S003","电脑",1500);

//构造购物车项

CartItem carItem1=new CartItem(shopInfo1,2);

CartItem carItem2=new CartItem(shopInfo2,1);

CartItem carItem3=new CartItem(shopInfo3,4);

//加入购物车项到购物车中

car.put(shopInfo1.getShopId(), carItem1);

car.put(shopInfo2.getShopId(), carItem2);

car.put(shopInfo3.getShopId(), carItem3);

return car;

}

}

创建用于处理购物车业务逻辑的Action,命名为StartAction.java,代码如下:public class StartAction extends BaseAction

{

private Map cart;//存储购物车到值栈中

public String execute() throws Exception

{

//调用业务层,创建购物车

this.cart=CartFactory.newInstance().createCar();

return "success";//返回到success逻辑视图

}

public Map getCart() {

return cart;

}

public void setCart(Map cart) {

this.cart = cart;

}

}

创建showCar.jsp页面,用于显示购物车商品,代码如下:

购物车商品如下
商品编号名称单价数量
合计:¥${sum }

练习

需求说明

使用Struts2表单标签,完成会员在线注册功能。如图2.8.5所示:

下拉框联动

图2.8.5 在线会员注册信息

在图2.8.5中,填写相关会员注册信息后,单击“提交”按钮进行处理,运行结果如图2.8.6所示:

图2.8.6 显示用户填写的注册信息

在图2.8.6中,如果用户单击“刷新”按钮重复提交表单,系统会阻止表单重复提交,

运行结果如图2.8.7所示:

图2.8.7 阻止用户重复提交

实现思路:

创建用于描述省的实体类命名为Shen.java,代码如下:

public class Shen

{

private String shenId;//省编号

private String shenName;//省名字

private Set shis=new HashSet();//一个省包括苦干市

//无参构造函数

public Shen()

{

}

//有参构造函数

public Shen(String shenId, String shenName) {

super();

this.shenId = shenId;

this.shenName = shenName;

}

//getter、setter方法省略…

}

创建用于描述市的实体类命名为Shi.java,代码如下:

public class Shi

{

private String shiId;//市的id

private String shiName;//市的名字

//无参构造函数

public Shi()

{

}

//有参构造函数

public Shi(String shiId, String shiName) {

super();

this.shiId = shiId;

this.shiName = shiName;

}

//getter、setter方法省略…

}

创建一个用于生成省和市关系集合的业务JavaBean,命名为CityService.java,代码如下:public class CityService

{

private Map citys=new HashMap();//定义城市Map

//构造函数

public CityService()

{

try

{

//创建省实例

Shen shen1=new Shen("Shen001","湖北省");

//创建省对应市

Shi s1=new Shi("Shi001","武汉市");

Shi s2=new Shi("Shi002","襄樊市");

Shi s3=new Shi("Shi003","仙桃市");

//将市加入对应省中

shen1.getShis().add(s1);

shen1.getShis().add(s2);

shen1.getShis().add(s3);

//创建省实例

Shen shen2=new Shen("Shen002","广东省");

//创建省对应市

Shi s4=new Shi("Shi004","广州市");

Shi s5=new Shi("Shi005","深圳市");

Shi s6=new Shi("Shi006","汕头市");

//将市加入对应省中

shen2.getShis().add(s4);

shen2.getShis().add(s5);

shen2.getShis().add(s6);

//创建省实例

Shen shen3=new Shen("Shen003","福建省");

//创建省对应市

Shi s7=new Shi("Shi007","厦门市");

Shi s8=new Shi("Shi008","福州市");

Shi s9=new Shi("Shi009","漳州市");

//将市加入对应省中

shen3.getShis().add(s7);

shen3.getShis().add(s8);

shen3.getShis().add(s9);

//将省添加到Map对象中

citys.put(shen1, shen1.getShis());

citys.put(shen2, shen2.getShis());

citys.put(shen3, shen3.getShis());

}catch(Exception e)

{

e.printStackTrace();

}

}

public Map getCitys() {

return citys;

}

public void setCitys(Map citys) {

this.citys = citys;

}

}

创建用于处理用户注册业务的Action,命名为RegAction.java,代码如下:public class RegAction extends BaseAction

{

private String uid;//封装用户名

private String pwd; //封装密码

private String post; //封装职业

private String shenId; //封装省代号

private String shiId; //封装市代号

private String[] loves; //封装爱好

private String channel; //封装了解途径

private Date birthday; //封装生日

public String execute() throws Exception

{

//获取输出对象

PrintWriter out=this.getResponse().getWriter();

SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日");

out.print("

你填写的会员注册信息如下:
");

out.print("用户名:"+this.uid+"
");

out.print("密码:"+this.pwd+"
");

out.print("职业代码:"+this.post+"
");

out.print("所在省编号:"+this.shenId+"
");

out.print("所在市编号:"+this.shiId+"
");

out.print("第一了解途径:"+this.channel+"
");

out.print("出生年月:"+sdf.format(this.birthday)+"
");

out.print("你的爱好有:");

if(this.loves!=null)

{

for(String love:this.loves)

{

out.print(love+" ");

}

}

else

{

out.print("没有选择任何爱好!");

}

out.print("


正在插入数据库...

");

return null;

}

//getter、setter方法省略…

}

创建reg.jsp,用于提供用户注册界面,代码如下:

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

<%@ taglib uri="/struts-tags" prefix="s" %>

无标题文档

在线会员注册信息填写
用户名:
密码:
确认密码:
职业:

list="#{'teacher':'老师','doctor':'医生','worker':'工人','student':'学生'}"

listKey="key"

listValue="value"

name="post"

/>

所在城市:

list="#map.keySet()"

listKey="shenId"

listValue="shenName"

name="shenId"

doubleList="#map[top]"

doubleListKey="shiId"

doubleListValue="shiName"

doubleName="shiId"/>

爱好:

list="#{'computer':'电脑','music':'音乐','football':'足球'}"

listKey="key"

listValue="value"

name="loves"

/>

第一了解途径:

list="#{'internet':'网络','newspaper':'报纸','medium':'媒体'}"

listKey="key"

listValue="value"

name="channel"

/>

出生年月: 

编写用于显示重复提交错误信息的资源文件,代码如下

创建application_zh.properties 中文资源文件,将文件存放到WEB-INF/classes 目录下,内容为:

struts.messages.invalid.token=表单已经提交,不能重复提交!

并使用native2ascii 命令进行转化

在struts.xml 中配置token 拦截器,代码如下:

图2.8.8 系统模块关系表

该表是一张“自关联”表。要求使用标签动态生成能够反映

该表模块之间逻辑关系的树型结构。如图2.8.9所示:

图2.8.9 系统模块关系树型结构

实现思路

创建实现上述功能相应的表,sql语句代码如下:

create table sys_menu

(

Id number primary key,

parentId number not null,

name varchar2(50) not null,

linker varchar2(50) not null

);

insert into sys_menu values(1,0,'短信平台管理系统','#');

insert into sys_menu values(2,1,'用户管理','#');

insert into sys_menu values(3,1,'员工管理','#');

insert into sys_menu values(4,1,'短信管理','#');

insert into sys_menu values(5,2,'用户权限管理','#');

insert into sys_menu values(6,2,'用户列表','#');

insert into sys_menu values(7,2,'用户回收站','#');

insert into sys_menu values(8,3,'员工信息列表','#');

insert into sys_menu values(9,3,'员工信息修改','#');

insert into sys_menu values(10,3,'发送短信','#');

insert into sys_menu values(11,4,'接受短信','#');

insert into sys_menu values(12,4,'短信统计','#');

insert into sys_menu values(13,4,'短信群发','#');

创建用于访问数据库的数据层,命名为BaseDAO.java类,代码如下:

public class BaseDAO {

//定义数据源驱动

private static final String DRIVER="oracle.jdbc.driver.OracleDriver";

//定义连接字符串

private static final String URL="jdbc:oracle:thin:@localhost:1521:soft";

//定义用户名

private static final String UID="ht";

//定义密码

private static final String PWD="ht";

//得到连接

public static Connection getConnection(){

Connection con=null;

try{

Class.forName(DRIVER);//加载驱动

con=DriverManager.getConnection(URL,UID,PWD);//获得连接

}catch(Exception e){

e.printStackTrace();

}

return con;

}

//执行有结果,没参数的sql语句

public static Result runSelectSql(String sql){

Connection con=null;

PreparedStatement ps=null;

ResultSet res=null;

Result result=null;

try{

con=getConnection();//得到连接

ps=con.prepareStatement(sql);//获取PreparedStatement对象

res=ps.executeQuery();

result=ResultSupport.toResult(res);//把ResultSet对象转换成Result对象

}catch(Exception e){

e.printStackTrace();

}finally{

try{

res.close();//关闭对象,释放资源

ps.close();

con.close();

}catch(Exception e){

e.printStackTrace();

Struts2学习之二--Struts2标签介绍

Struts2学习之二--Struts2标签介绍 热12已有 14625 次阅读 2009-07-12 18:53 [顶]3G移动--Android开发工程师全能班 (转) Struts2学习之二--Struts2标签介绍 在上一篇文章《为Struts 2.0做好准备》中,我过于详细地介绍了Struts 2.0开发环境和运行环境的配置,所以,本文很少涉及的以上两方面的细节。如果,您看完《为Struts 2.0做好准备》后,还有什么不明白,或者没法运行文中例子,请联系我。我的E-MAIL:Max.M.Yuan@https://www.wendangku.net/doc/b617392816.html,。 在介绍常用标志前,我想先从总体上,对Struts 1.x与Struts 2.0的标志库(Tag Library)作比较。 分类将标志库按功能 分成HTML、Tiles、 Logic和Bean等 几部分 严格上来说,没有分类,所有标志都在URI 为“/struts-tags”命名空间下,不过, 我们可以从功能上将其分为两大类:非UI 标志和UI标志 表达式语言(expression languages)不支持嵌入语言 (EL) OGNL、JSTL、Groovy和Velcity 以上表格,纯属个人总结,如有所不足或错误,请不吝指正 好了,我要开始介绍“常用”(这里所谓的“常用”,是指在已往工作中使用Struts里经常用到的)的标志了。 1.非UI标志 o if、elseif和else 描述: 执行基本的条件流转。

参数: 名称必 需 默 认 类型描述备注 test 是Boolean 决定标志里内容是否 显示的表达式 else标志 没有这个 参数 id 否Object/String 用来标识元素的id。在UI和表单中为HTML的id属性 例子: <%@ page contentType="text/html; charset=UTF-8" %> <%@ taglib prefix="s" uri="/struts-tags" %> Condition Flow

Condition Flow

" /> Max's file here Scott's file here

Strus2标签库

Strus2标签库 Struts2提供了一套标签库用于简化JSP层的编程,开发者只需要标签中做少量的设置,就可以实现各种常用的效果。Struts2的标签与Action联系比较紧密,使用标签后,Struts会自动完成JSP层的显示数据、在Action层采集数据等工作。 Struts2的标签都统一包含在struts-tags.tld文件中(位于struts2-core-2.2.1.jar中),使用统一前缀。 Struts标签库大致分为: UI标签:包括表单标签,非表单标签 非UI标签:流程控制标签,数据访问标签 首先要在JSP中使用taglib编译指令导入标签库,然后才可以使用标签。 <%@taglib prefix="s" uri="/struts-tags"%> 以上代码用于导入Struts2标签库,其中URI就是对应web.xml文件中指定的标签库的URI,而prefix属性值是该标签库的前缀。 第1节OGNL语言 OGNL是Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言(Expression Language,简称为EL),通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。它使用相同的表达式去存取对象的属性。 OGNL语法类似于EL,主要使用.作为操作符,例如要访问person.getCountry().getName()可以这样写:https://www.wendangku.net/doc/b617392816.html,。 1.1 OGNL的常用符号 主要是#号,其作用有三种: 1. 访问OGNL上下文与ActionContext资源,相当于ActionContext.getContext(), 常用#属性如下表: parameters: 相当于:request.getParameter("userName");

struts2复习题(含答案)

Struts2复习题 1.以下属于struts2的控制器组件是: 2.以下属于struts2的体系结构的是:(多选) 控制器组件配置文件 3.以下属于struts2配置文件中的配置元素是:(多选) A. B. C. D. 4.关于struts1和struts2对比的说法正确的是: 要求Action类继承struts1框架中的Action父类,struts2中则不一定需要继承,可以是POJO 类 中的Action不是线程安全的,而struts2中的Action是线程安全的 和struts2中都使用ActionForm对象封装用户的请求数据 使用OGNL表达式语言来支持页面效果,struts2通过ValueStack技术使标签库访问值 5.以下关于ValueStack说法正确的是:(多选) A.每个Action对象实例拥有一个ValueStack对象 B.每个Action对象实例拥有多个ValueStack对象 中封装了需要传入下一个页面的值,这些值封装在ValueStack对象中 会在请求开始时被创建,请求结束时消亡 6.关于struts2配置文件说法正确的是: A.必须在WEB-INF/classes目录下 B.名字必须为 C.配置Action时,必须配置包信息 D.使用元素配置转发 7.在struts2配置中用()元素来配置常量: A. B. C. D. 8.关于struts2包的说法正确的是: 框架使用包来管理常量 框架定义包时必须指定name属性 框架中配置包时,必须继承自struts-default包,否则会报错 框架中使用包来管理Action 9.struts2中获取Servlet API的方法正确的是:(多选) A.使用ActionContext对象以解耦合的方法访问Servlet API B.使用ServletActionContext对象以解耦合的方式访问Servlet API C.使用ActionContext对象以耦合的方式访问Servlet API D.使用ServletActionContext对象以耦合的方式访问Servlet API 10.struts2动态调用的格式为: ! 11.如果要实现struts2的数据校验功能 A.普通Action类可以实现 B.继承自Action接口可以实现 C.继承自ActionSupport类可以实现 D.继承自ActionValidate类可以实现

struts2标签使用实例

Struts2中数据标签使用示例 S truts2提供了大量丰富的标签供使用,它不再像S truts1中一样,将种类标签进行分门列别,但可以根据其使用的用途用以区别。本文通过对S truts2中数据标签的学习,来对S truts2中标签的学习起到一个抛砖引玉的作用。 文中将介绍Action标签、Bean标签、Data标签、Include标签、P aram标签、Set标签、T ext标签、P roperty 标签等标签。 代码下载:https://www.wendangku.net/doc/b617392816.html,/y1ps2Mjpc3NiLKuetMOpCsZOOypD6KSdo8-46Zy2wpoMcABeo4vOC NJXtWDEO93-TXgZogwAF YxSOni5BEG2EoN65OFwHdG71v-/St ruts2DataTags.rar?download 一、标签 Action标签,顾名思义,是用来调用Action的标签,在JSP中页面中,可以指向具体指定某一命名空间中的某一Action。而标签的主体用于显示及渲染Actionr的处理结果。 1.WebRoot\pages\dataTagssuccess.jsp处理页面 <%@ page contentType="text/htm l; charset=GBK" %> <%@ taglib prefix="s" uri="/struts-tags" %> Action Tag 示例

Action Tag 示例

s:action标签用于在页面显示结果.
这里使用标签进行页面跳转,并用于显示处理的结果。 2.先来看st ruts.xml中的配置: /pages/dataTags/success.jsp

struts2标签和OGNL表达式

1.OGNL表达式语言 OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,它是一个开源项目。 Struts 2框架使用OGNL作为默认的表达式语言。 相对EL表达式,它提供了平时我们需要的一些功能,如: 支持对象方法调用,如xxx.sayHello(); 支持类静态方法调用和值访问,表达式的格式为@[类全名(包括包路径)]@[方法名 | 值名],例如:@https://www.wendangku.net/doc/b617392816.html,ng.String@format('foo %s', 'bar')或 @cn.itcast.Constant@APP_NAME; 操作集合对象。 Ognl 有一个上下文(Context)概念,说白了上下文就是一个MAP结构,它实现了java.utils.Map接口,在Struts2中上下文(Context)的实现为ActionContext,下面是上下文(Context)的结构示意图 2.访问上下文(Context)中的对象需要使用#符号标注命名空间,如 #application、#session 另外OGNL会设定一个根对象(root对象),在Struts2中根对象就是ValueStack (值栈)。如果要访问根对象(即ValueStack)中对象的属性,则可以省略#命名空间,直接访问该对象的属性即可。 在struts2中,根对象ValueStack的实现类为OgnlValueStack,该对象不是我们想像的只存放单个值,而是存放一组对象。在OgnlValueStack类里有一个List 类型的root变量,就是使用他存放一组对象 |--request |--application context ------|--OgnlValueStack root变量[action, OgnlUtil, ... ] |--session |--attr |--parameters 在root变量中处于第一位的对象叫栈顶对象。通常我们在OGNL表达式里直接写上属性的名称即可访问root变量里对象的属性,搜索顺序是从栈顶对象开始寻找,如果栈顶对象不存在该属性,就会从第二个对象寻找,如果没有找到就从第三个对象寻找,依次往下访问,直到找到为止。 大家注意: Struts2中,OGNL表达式需要配合Struts标签才可以使用。如: 3.由于ValueStack(值栈)是Struts 2中OGNL的根对象,如果用户需要访问值栈中的对象,在JSP页面可以直接通过下面的EL表达式访问ValueStack(值栈)中对象的属性: ${foo} //获得值栈中某个对象的foo属性

Struts2标签使用

Struts2标签使用 (1): ---- 文本输入框 使用: (2): ----- 文本域输入框 使用: (3): ----- 密码输入框 使用: 前三个基本都是一样的。如果是要显示值的话可以这样:value = “实体Bean。Get***()”。 (4): ---- 单选按钮 使用:其中list 属性是必须要有的。 <1>:第一种方式:list = “#{‘male’:’男’,’female’:’女’}”

<2>:第二中方式:list = “#request/session.list”。 ---- 与action 结合起来了。 如果要默认选中的话后面加上value = “”.也可以通过javascript 的方式来默认选中。 (5): --- url连接 --- 超链接 这两个标签一般结合起来来使用。 使用: (6): --- 获取相应form的值 使用: <1>:

史上最全的struts2标签

a a标签创建一个HTML超链接,等价于HTML 的登陆 更多 a 信息 action 使用action标签可以允许在JSP页面中直接调用Action。 范例如下: 更多 action 信息 actionerror 这个标签负责输出错误信息到客户端。 示范代码: Action代码如下: public String execute() { addActionError("第一条错误消息!"); addActionError("第二条错误消息!"); return SUCCESS; }.... JSP中: 更多 actionerror 信息 actionmessage

这个标签负责输出提示信息到客户端,例子如下: Action代码如下: public String execute() { addActionMessage("第一条普通消息!"); addActionMessage("第二条普通消息!"); return SUCCESS; } JSP: 更多 actionmessage 信息 append 用来做iterator标签的辅助,将不同iterator中的内容合在一个iterator中。例子: 更多 append 信息 bean bean标签用于创建一个JavaBean的实例。 示范样例: 更多 bean 信息

struts标签说明

常用Struts标签的使用说明 Struts Html标签库 1,:生成HTML

元素,action属性用来指定用户提交表单后,处理用户请求的组建。Struts 框架将参照struts配置文件来查找相应的action组建。在struts-config.xml 文件中 1, 与user.do对应得代码是: 2,:生成HTML标签的property属性指定字段的名字,对应ActionForm bean中的一个属性,代码如下: 的对应的userForm bean属性 private String login_Name; public String getLogin_Name() { return login_Name; } public void setLogin_Name(String login_Name) { this.login_Name = login_Name; } 3,:生成HTML标签,使用方法与相同。 启用 停用 4,:生成HTML 5.在JSP页面中可以通过Struts 2提供的___D________标签来输出国际化信息。D A. B. C. D. 6.资源文件的后缀名为____D_______。D

struts2复习模拟题

填空: 1.Struts 2以__过滤器__为核心,采用__拦截器__的机制来处理用户的请求。 2.构建Struts 2应用的最基础的几个类库是_struts2-core__、_commons-logging_、_xwork-core_、__freamarker___以及_ognl_。 3.Struts 2中的控制器类是一个普通的_POJO_。 4.如果要在JSP页面中使用Struts 2提供的标签库,首先必须在页面中使用taglib编译指令导入标签库,其中taglib编译指令为_____<%@ taglib prefix=”s” uri=”strut-tags”%>______。5.在Struts 2表单标签库中,表单标签为__________。 6.ActionSupport类实现了__action_________接口和___validateable________等接口。7.通过控制器类中的____validate()_______方法来输出校验错误信息。 8. 在Hibernate XML影射文件中描述主键生成机制,其属性描述了主键的生成策略,至少写出三种策略名 increment 、 native 、 uuid 。 9. 在Hibernate中级联操作的属性值至少写出三个____none_______ 、_____save-update______、____all_______。 10 Hibernate的会话接口是 ______Session接口_____,它由接口 __SessionFactory接口__创建;Hibernate处理事务的接口是____Transaction接口_______;封装HQL的接口是_____Criteria接口______ 。 11.Struts2框架由_____ Struts ______和______ WebWork _____框架发展而来。 12.Struts2中的控制器类是一个普通的____Class_______。 13.注入资源的注释是____@Resource ___

马士兵struts2学习笔记(详细版)

1、02_尚学堂马士兵_Struts2_Struts2_HelloWorld_2.avi 指定Tomcat的目录,指定JDK搭建开发环境(拷贝jar包,复制struts.xml 文件此文件不要放在WEB-INF下面,应该放到src下面),在web.xml文件中: struts2 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAn dExecuteFilter struts2 /* 其中/* 不要写/*.do 或者 /*.action约定俗成用/* 2、04_尚学堂马士兵_Struts2_Struts2_HelloWorld_3.avi (1) action -->相应的处理类或页面 --> /Hello.jsp (2)struts.xml不自动提示的解决办法: window--perferences-XML catalog---add---key Type="URI" key="*.dtd" 3、09_尚学堂马士兵_Struts2_Struts2_HelloWorld_7_2.avi struts2的执行流程: 当用户在浏览器中敲入要访问的地址的时候,浏览器会将这个请求发送给

struts标签库

Struts1之HTML标签库详解1 2010-05-09 15:19 Struts提供了五个标签库,即:HTML、Bean、Logic、Template和Nested。 标签的公共特征 使用固定属性名称的Struts 标签: Struts 标签也支持嵌套引用,例如: 虽然Struts 标签的设计原意是为了避免使用scriptlet,scriptlet的表达式还能够提供给所有的Struts 标签使用。但请确保使用完整的表达式: Html 标签库 1.标签 它有两个属性:locale和xhtml,两者都不是必需的。 2.说明:生成的结果取决于Struts应用程序所位于的服务器的locale。如果你将应用程序部署到一个

不同locale的服务器,你不需要改变代码,Locale会自动调整。 3.标签:表示所包含页面的绝对位置。这个标签只有内嵌在head标签中才有效。 4.标签 最重要的属性page:图象文件的路径,前面必须带有一个斜线。 其它属性:heignt、width、alt。 5.标签 6.标签:通过一个简单的标签,你就可以在一个JSP页面上显示完全自定义的错误信息。功能超强大!! 说明:这个标签在Request对象的属性集合中查找reserved key。如果它找到一个reserved key,它就假设这个key是一个String、或是一个String数组 (它包含在模块的MessageResources中查找的message keys)、或是类型为 org.apache.struts.action.ActionErrors的一个对象。 如果在应用程序资源中存在相应的信息,那么就可以用下面这些可选的message keys: · errors.header or errors.prefix:相应的信息在错误信息的单独列表前显示。 · errors.footer or errors.suffix:相应的信息在错误信息的单独列表后显示。 7.标签系列 使用标签时必须遵循一些规则: 1.标签中必须包含一个action属性,它是这个标签中唯一必需的属性。如果不具备该属性则JSP页面会抛出一个异常。之后你必须给这个action属性指定一个有效值。一个有效值是指应用程序的Struts配置文件中元素里的任何一个子元素的访问路径。而且相应的元素中必须有一个name属性,它的值是form bean的名称。

struts2(checkbox_radio_select)表单标签的应用及详细事例

一、表单标签_checkbox复选框 如果集合为list 生成如下html代码: ************************************************ *****
如果集合为MAP

listKey="key"listValue="value" value="{1,2,3}"/> 生成如下html代码: ************************************************ ******
如果集合里存放的是javabean(id和name为Person的属性) <% Person person1 = new Person(1, "第一个"); Person person2 = new Person(2, "第二个"); List list = new ArrayList(); list.add(person1); list.add(person2); request.setAttribute("persons", list); %> 生成如下html代码:

Struts2的AJax标签

11.6 常用的Ajax标签 struts2为了简化Ajax过程,提供了一些常用的Ajax标签。可以满足一般的Ajax需求,对于一些更为复杂的Ajax通信过程,我们可以使用后加的JSON插件来实现。 11.6.1 div标签 div标签在页面上生成一个Div元素,但这个Div元素的内容不是静态内容,而是从服务器获取的内容。为了让该div标签能取得服务器的数据,必须为该div标签指定一个(1)href属性,这个属性必须是一个Action,该Action负责生成该Div元素的内容。 --------------------------------------------------------------------------------------------------------------------------------------------- 提示:因为div标签是一个Ajax标签,因此应为该标签增加theme=“ajax”属性。 --------------------------------------------------------------------------------------------------------------------------------------------- 还可以指定该div标签生成的Div元素以固定的频率来更新自身的内容,为了指定更新频率和更新延迟,可以指定如下两个属性: (2) updateFreq:指定更新Div内容的时间间隔,单位是ms。如果不指定该属性,则只在页面加载时更新该Div的内容。 (3)delay:指定更新Div内容的时间延迟,单位是ms。如果不指定,且指定了updateFreq 属性,则页面加载后立即开始计时,准备刷新该Div的内容。如果没有指定updateFreq属性,则该属性没有任何意义。 如果服务器的响应包含了JavaScript代码,且希望在本页面内执行服务器响应的JavaScript 代码,则可以为该div标签指定(4)executeScripts=“true”。 看下面的页面代码: <%@ page contentType="text/html;charset=GBK" language="java" %> < %@ taglib prefix="s" uri="/struts-tags" %> < html> < head> < title>远程Div < s:head theme="ajax" /> < /head> < body> 仅一次获取服务器内容的Div 初始化文本 动态更新内容的Div,每隔1s刷新一次(通过指定updateFreq=“1000”)
上一页 下一页 二、s:checkboxlist标签 简介 Checkboxlist标签可以一次创建多个复选框,用于一次生成多个HTML标签中的,它根据list 属性指定的集合来生成多个复选框。 1. jsp代码 listKey:该属性指定集合元素中某个属性作为复选框的value. listV alue: 该属性指定集合元素中某个属性作为复选框的标签。 三、使用s:combobox生成下拉输入框 简介 Combobox标签生成一个单行文本框和下拉列表框的组合,但两个表单元素只对应一个请求参数,只有单行文本框里的值才包含请求参数,而下拉列表框则只是用于辅助输入,并没有name,也不会产生请求参数。使用该标签,需要指定一个list属性,该list属性指定的集合将用于生成列表项。 1. Jsp代码

相关文档
相关文档 最新文档