在struts中使用logic标签详细说明.docx

上传人:b****4 文档编号:3871531 上传时间:2023-05-06 格式:DOCX 页数:12 大小:55.78KB
下载 相关 举报
在struts中使用logic标签详细说明.docx_第1页
第1页 / 共12页
在struts中使用logic标签详细说明.docx_第2页
第2页 / 共12页
在struts中使用logic标签详细说明.docx_第3页
第3页 / 共12页
在struts中使用logic标签详细说明.docx_第4页
第4页 / 共12页
在struts中使用logic标签详细说明.docx_第5页
第5页 / 共12页
在struts中使用logic标签详细说明.docx_第6页
第6页 / 共12页
在struts中使用logic标签详细说明.docx_第7页
第7页 / 共12页
在struts中使用logic标签详细说明.docx_第8页
第8页 / 共12页
在struts中使用logic标签详细说明.docx_第9页
第9页 / 共12页
在struts中使用logic标签详细说明.docx_第10页
第10页 / 共12页
在struts中使用logic标签详细说明.docx_第11页
第11页 / 共12页
在struts中使用logic标签详细说明.docx_第12页
第12页 / 共12页
亲,该文档总共12页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

在struts中使用logic标签详细说明.docx

《在struts中使用logic标签详细说明.docx》由会员分享,可在线阅读,更多相关《在struts中使用logic标签详细说明.docx(12页珍藏版)》请在冰点文库上搜索。

在struts中使用logic标签详细说明.docx

在struts中使用logic标签详细说明

logic:

iterate

logic:

iterate标签用来迭代集合,您可以使用如下方式来为这个标签指定其要叠代的集合:

∙使用一个运行时表达式,这个表达式的值是一个集合。

∙用name属性引用一个JSPBean,这个JSPBean本身就是一个集合(或者干脆直接引用集合类.)。

∙用name属性引用一个JSPBean,这个JSPBean的一个属性是一个集合,这时可以联合使用property来指定这个集合。

上面所提到的集合可以是:

∙对象类型或原子类型的数组(Array)。

∙java.util.Collection的实现,包括ArrayList,Vector。

∙java.util.Enumeration的实现。

∙java.util.Iterator的实现。

∙java.util.Map的实现,包括HashMap,Hashtable和TreeMap。

如果您叠代的集合中含有null的值,这时需要采取一定的措施,因为这时logic:

iterate不会在page作用域中创建对象。

一般是使用

present>标签或

notPresent>标签来判断一下。

iterate标签的常用属性如下:

●   id:

指定页面范围的jsp变量的名称,该变量存储每次迭代的当前集合元素的引用.也就是说,id属性的值时可以任意写的,他存储了迭代当前集合元素的值.不过要保证

write>标签的name属性的值和iterate标签的id值一致.如下图三所示.

●   name:

指定包含要迭代的集合对象的名称,如果还指定了property属性,将调用对象中该属性定义的一个字段的值获取方法,以返回一个要迭代的集合.也就是说,在没有property属性的时候,name属性指的是一个集合,而在有property属性的时候,name属性指的一般是一个form-bean,当然你也可以用jsp:

userBean标签指定一个bean,而property属性指的是这个form-bean(bean)的一个集合类.

下面是logic:

iterate叠代ArrayList的示例的对象引用关系和部分代码:

图示3.logic:

iterate中对象的引用关系

图中的persons列表是在ListAction中填充的,在这里只是简单的加入了三个Person对象,在实际的应用中这些数据应该取自数据库。

具体的代码如下:

publicActionForwardexecute(ActionMappingmapping,ActionFormform,HttpServletRequestrequest,HttpServletResponseresponse){

ListFormlistForm=(ListForm)form;

Listpersons=newArrayList();

Personperson1=newPerson();

person1.setId("00001");

person1.setName("赵辰");

Personperson2=newPerson();

person2.setId("00002");

person2.setName("李为芳");

Personperson3=newPerson();

person3.setId("00003");

person3.setName("王微");

persons.add(person1);

persons.add(person2);

persons.add(person3);

listForm.setPersons(persons);

returnmapping.findForward("success");

}

标签输出的结果为:

00001-->赵辰

00002-->李为芳

00003-->王微

在struts中,读取数据库中的多条数据然后显示到jsp页面上可以用如下的方法去做:

∙1.在Form中定义一个ArrayListimportjava.util.ArrayList;

importjavax.servlet.http.HttpServletRequest;

importorg.apache.struts.action.ActionErrors;

importorg.apache.struts.action.ActionForm;

importorg.apache.struts.action.ActionMapping;

publicclassAlloperationFormextendsActionForm{

privateArrayListlist;

publicActionErrorsvalidate(ActionMappingmapping,HttpServletRequestrequest){}

publicvoidreset(ActionMappingmapping,HttpServletRequestrequest){}publicArrayListgetList(){returnlist;}publicvoidsetList(ArrayListlist){this.list=list;}}

∙2.在Action中调用一个返回游标的存储过程,得到所有的记录,找把它封装成一个Bean.publicclassAlloperationActionextendsAction{publicActionForwardexecute(ActionMappingmapping,ActionFormform,HttpServletRequestrequest,HttpServletResponseresponse){AlloperationFormoperationForm=(AlloperationForm)form;

Connectionconn=ConnectDataBase.connection();

StringcallFunction="{?

=callalloperation.getalloperation}";

ResultSetrs=null;

ArrayListalist=newArrayList();try{CallableStatementstmt=conn.prepareCall(callFunction);

stmt.registerOutParameter(1,OracleTypes.CURSOR);

stmt.execute();

rs=((OracleCallableStatement)stmt).getCursor

(1);

while(rs.next())

{

StringoperationName=rs.getString

(1);

StringoperationType=rs.getString

(2);

Stringcharge=rs.getString(3);

StringcharegeType=rs.getString(4);

System.out.println("operationName"+operationName);

System.out.println("operationType"+operationType);

System.out.println("charge"+charge);

System.out.println("chargeType"+charegeType);

AllOperationBeanoperationBean=newAllOperationBean

(operationName,operationType,charge,charegeType);

alist.add(operationBean);

}

conn.close();

operationForm.setList(alist);

}catch(SQLExceptione){e.printStackTrace();

}

returnmapping.getInputForward();

}

}

∙定义的bean:

packagecom.penguin.bean;

publicclassAllOperationBean{

privateStringoperationName;

privateStringoperationType;

privateStringchargeType;

privateStringcharge;

publicAllOperationBean(StringoperationName,StringoperationType,Stringcharge,StringchargeType)

{this.operationName=operationName;

this.operationType=operationType;

this.charge=charge;

this.chargeType=chargeType;

}publicStringgetCharge(){

}

publicvoidsetCharge(Stringcharge){

this.charge=charge;

}

publicStringgetChargeType(){

returnchargeType;

}

publicvoidsetChargeType(StringchargeType){

this.chargeType=chargeType;

}

publicStringgetOperationName(){

returnoperationName;

}

publicvoidsetOperationName(StringoperationName){

this.operationName=operationName;

}publicStringgetOperationType(){

returnoperationType;

}publicvoidsetOperationType(StringoperationType){

this.operationType=operationType;

}

}

∙在jsp页面中用标签调用代码如下图:

其中alloperationFormation是在struts配置文件中定义的form-bean的名称.

        

通过上述步骤就可以在jsp页面中显示出多条记录了..

iterate>是Logic标签库中最复杂的标签,也是用途最广的一个标签,它能够在一个循环中遍历数组、Collection、Enumeration、Iterator或Map中的所有元素。

1.遍历集合

iterate>的name属性指定需要进行遍历的集合对象,它每次从集合中检索出一个元素,然后把它放在page范围内,并以id属性指定的字符串来命名这个元素,例如:

   <%

       Vectoranimals=newVector();

       animals.addElement("Dog");

       animals.addElement("Cat");

       animals.addElement("Bird");

       animals.addElement("Chick");

       request.setAttribute("Animals",animals);

   %>

   

iterateid="element"name="Animals">

       

writename="element"/>

   

iterate>

   以上代码先定义了一个Vector类型的集合变量Animals,它存放在request范围内.接下来

iterate>标签在一个循环中遍历Animals集合(这个集合名就是在标签中的name属性的值)中所有元素,每次检索到一个元素,就把它命名为"element"(标签id属性的值),并存放在page范围内.

   在

iterate>中,还嵌套了一个

write>标签,它用于输出每个元素的内容.以上代码的输出内容如下:

   Dog

   Cat

   Bird

   Chick

   

   length  属性指定需要遍历的元素的数目,如果没有设置length属性,就遍历集合中的所有元素.

   offset      属性指定开始遍历的起始位置,默认值为"0",表示从集合的第一个元素开始遍历.

scope:

可以指定指定作用范围如:

scope=”request”或session.

   indexId属性定义一个代表当前遍历元素序号的变量,这个变量被存放在page范围内,可以被标签主体的

write>标签访问.例如:

   

iterate

            id="element"           //指定输出元素的名与

write>中name属性一致

         indexId="index"      //遍历元素序号的变量,这个变量放在page范围内

         name="Animals"   //request中的集合名,从中取循环取出元素

           offset="1"                //从集合的第2条记录开始取数

           length="2">             //取出2个元素

       

writename="index"/>.              //输出每个元素的序号,与indexId的属性一致

       

writename="element"/>
//输出每个元素的内容,与id的属性一致

   

iterate>

2.遍历Map

   

iterate>标签还可以遍历HashMap中的元素,例如:

   <%

       HashMapmonths=newHashMap();

       

       months.put("Jan","January");

       months.put("Feb","February");

       months.put("Mar","March");

       

       request.setAttribute("month",months);

   %>

   

iterateid="element"indexId="ind"name="months">

       

writename="ind"/>.                                         //序号

       

writename="element"property="key"/>:

     //键名

       

writename="element"property="value"/>   //键值

   

iterate>

   以上代码先定义一个名为"months"的HashMap,存放在request范围内.接下来在

iterate>标签遍历months对象的每一个元素,每一个元素包含一对key/value.在

iterate>标签主体中包含三个

write>标签,分别输出每个元素的序号、key和value.以上代码的输出内容如下:

   0.Mar:

March

   1.Feb:

February

   2.Jan:

January

   如果HashMap中的每个元素的value是集合对象,则可以采用嵌套的

iterate>标签遍历集合中的所有对象,例如:

   <%

          HashMaph=newHashMap();

          Stringvegetables[]={"pepper","cucumber"};

          Stringfruits[]={"apple","orange","banana","cherry","watermelon"};

          Stringflowers[]={"chrysanthemum","rose"};

          Stringtrees[]={"willow"};

          

          h.put("Vegetables",vegetables);

          h.put("Fruits",fruits);

          h.put("Flowers",flowers);

          h.put("Trees",trees);

          

          request.setAttribute("catalog",h);

   %>

   

iterate  id="element"             //与

write>中的name属性对应,输出内容

                             indexId="ind"              //与

write>中的name属性对应,输出序号

                            name="catelog">      //指定输出元素的名称

       

writename="ind"/>.          //输出序号

       

writename="element"     //与

iterate>中id属性对应

  property="key"/>   //集合中的键名

       

iterate

               id="elementValue"  //与

write>中的name属性对应

               name="element"      //指定输出元素的名称

              property="value"       //集合中的键值

              length="3"                 //取3个元素

  offset="1">                             //从第2个位置取

    -------

writename="elementValue"/>

iterate>

   

iterate>

   以上代码先定义一个名为"catelog"的HashMap,存放在request范围内,它的每个元素的value为字符串数组.

   接下来外层的

iterate>标签遍历HashMap中的所有元素,内层的

iterate>标签访问每个元素的value属性,遍历value属性引用的字符串数组中的所有元素.

3.设置被遍历的变量

   可以通过以下方式来设置需要遍历的变量

   

(1)设置name属性,name属性指定需要遍历的集合或Map,例如:

       

iterateid="element"name="Animals">

          

writename="element"/>

       

iterate>

   

(2)设置name属性和property属性,name属性指定一个JavaBean,property属性指定JavaBean的一个属性,这个属性为需要遍历的集合或Map,例如:

       

iterateid="element"indexId="ind"name="catelog">

           

writename="ind"/>

           

writename="element"property="key"/>

           

iterateid="elementValue"name="element"property="value"length="3"offset="1">

               --------

writename="elementValue"/>

           

iterate>

       

iterate>

   (3)设置collection属性,collection属性指定一个运行时表达式,表达式的运算结果为需要遍历的集合或Map,例如:

       

       

iterateid="header"collection"<%=request.getHeaderNames()%>">

           

writename="header"/>

       

iterate>

4.读取JavaBean中的数据

(1)在Jsp页面中加入JavaBean如:

       

useBeanid="articleClasses"class="com.GetArticleClasses"/>

     上面这个JavaBean要求必须存在一个集合数组对象,如Vector,Collection,ArrayList等;在这个JavaBean的构造函数中,取得数据

库中的数据,并将其存入数组对象中。

(2)使用

iterate>标签,取出JavaBean中存放的数组对象中的数据

       

iterate

         

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2