Struts 1.x | <logic> 标签库

<logic> 标签库        

 

         1)要使用Logic标签库必须要加入标签库的声明
            <%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
         2)logic标签库中的提供的大多数功能完全可以用jstl来替代。一般在logic标签库用得最多的标签就是

            <logic:iterator>标签

             
        <logic:equal>用于比较两个值是否相等
            A:格式:<logic:equal name="在四种范围内的变量的值" value="用于比较的值" > 
               <%
                    String uid="chen";
                    request.setAttribute("uid",uid); 
                %>     
                <logic:equal name="uid" value="chen"> //用于比较
                              相等
                 </logic:equal>
            B:比较javabean的属性值
                 <% 
                   worker d=new worker();
                   d.setId("W1");
                   request.setAttribute("uid",d); 
                %>
        
             <logic:equal name="uid"  property="id" value="W1" >
                equal
            </logic:equal>  表示把request范围内的uid的JavaBean的属性值与W1进行比较

                 其它的用于比较的标签,用法与<logic:equal>一样                
                   A:<logic:greaterEqual>大于或等于
                   B:<logic:greaterThan>大于
                   C:<logic:lessEqual>小于或等于
                   D:<logic:lessThan>小于

              应用举例:
                 1)让用户输入一个职工的编号从数据库查找出对应的部门,如果该部门是销售部
                   则显示是销售部,否则显示不是销售部
                   思路:input.jsp--->Action--->调用JavaBean进行计算得出部门--->转到show.jsp
                         页面进行判断(比较的过程在show.jsp,得出结果在Action中) 

                 2)我们完全可以使用jstl标签。
                          <c:choose>
                             <c:when test="${depart=='销售部'}">
                             <h1>is sales</h1>
                             </c:when>
                             <c:otherwise>
                              <h1>not is</h1>
                             </c:otherwise>
                         </c:choose>

 

        <logic:iterator>标签.相当于jstl中的<c:forEatch>


                 1)用于循环输出数据项
                 2)格式:
                     <logic:iterator id="存入page范围内变量" name="从四种范围变量中取出的集合名">
                       ${}
                     </logic:iterator>

                 3)原理:每次从name指定的集合中检索出一个元素,然后把它放在page范围内
                         并以id属性指定的名字来命名这个元素
        ==========================================================
                        <%
                           ArrayList list=new ArrayList();
                           list.add("chen");
                           list.add("yuan");
                           list.add("haung");
                           request.setAttribute("list",list);
                       %>
                          <logic:iterate id="workerName" name="list">
                          <bean:write name="workerName"/><br>
                          </logic:iterate>  
        ================================================================        
               3)把JavaBean集合进行输出
                 <%
                      ArrayList users=new ArrayList();
                      users.add(new Person("tomcat",12));
                      users.add(new Person("Mysql",120));   
                      users.add(new Person("oracle",16));
                      request.setAttribute("users",users)
                  %>
                   <logic:iterate id="user" name="users">
                         <bean:write name="user" property="name"/><br>相当于${user.name}
                         <bean:write name="user" property="age"/><br> 相当于${user.age}
                    </logic:iterate> 


                     <c:set var="orderList" value="<%=orderDao.getAllOrder()%>" scope="request"/>

 

               4)<logic:iterate>还可以访问map中的元素
                        <%        
                            Map personMap=new HashMap();
                            personMap.put("W1","张三");
                            personMap.put("W2","李四");
                            personMap.put("W3","王五");
                            personMap.put("W4","赵六");                   
                       %>
                           <c:set var="personMap" value="<%=personMap %>"/>
                           <logic:iterate id="person" name="personMap">
                                <bean:write name="person" property="key"/> 相当于${person.key}
                                <bean:write name="person" property="value"/>相当于${person.value}
                          </logic:iterate>


             5)设置被访问的变量:
                   A:设置name属性,name属性指定要遍历的集合或map,
                   B:设置name属性和property属性,name属性指定一个javaBean,property属性指定java

                       的一个属性,这个属性做为遍历的集合或map.比如:
                      <%
                           String love[]={"dance","jump","read"};
                           person personInstance=new person("p1","zhang",love);
                           request.setAttribute("personInstance",personInstance);
                       %>
                      <logic:iterate id="elementLove" name="personInstance" property="love">
                               ${elementLove }
                      </logic:iterate>

       改为:
       <%
           ArrayList persons=new ArrayList();
           person personInstance1=new person("p1","zhang",new String[] {"dance1","jump1","read1"});
           person personInstance2=new person("p1","zhang",new String[] {"dance2","jump2","read2"});
           person personInstance3=new person("p1","zhang",new String[] {"dance3","jump3","read3"});
           persons.add(personInstance1); 
           persons.add(personInstance2);    
           persons.add(personInstance3);             
           request.setAttribute("persons",persons);
      %>
     <logic:iterate id="elementPerson" name="persons">
            <br>=========${elementPerson.id} ${elementPerson.name}======<br>
         <logic:iterate id="elementLove" name="elementPerson" property="love">
                ${elementLove }
          </logic:iterate>
     </logic:iterate>
                  

            举例:


              1)从数据库中查询结果用<logic:iterate>标签进行输出(注意indexId的使用
                     <logic:iterate id="empList" name="emps" indexId="index">
                         <c:choose> 
                            <c:when test="${index%2==0}">
                              <tr align="center" bgcolor="#FFFFFF">
                            </c:when>
                         <c:otherwise>
                               <tr align="center" bgcolor="yellow">
                         </c:otherwise>
                         </c:choose>
                              <td><bean:write name="empList" property="id"/></td>
                              <td><bean:write name="empList" property="name"/></td>
                             <td><bean:write name="empList" property="job"/></td>
                            </tr>  
                        </logic:iterate>
              2)定义一个部门类,里面有一个属性为该部门的员工集合,输出部门信息与该部门员工信息,depts里面包含

                 多个dept,一个dept里面包含多个emp
                以分组报表有形式进行输出
      ===========================dept部门类==================================
        public class dept  {
              private String id;
              private String name;    
               public ArrayList getEmps() { //说明对于"只读属性"可以直接写get方法,没有必要
                                                            //定义私有变量,也就是说该javaBean自动会有emps属性
                  ArrayList empsList=new ArrayList();
                  String sql="select empno,ename from emp where deptno="+this.id;
                  ResultSet rs=db.runSql(sql);
                  while(rs.next())  {
                          emp empInstance=new emp(rs.getString(1),rs.getString(2));
                          empsList.add(empInstance);
                   }
                   return empsList;
               }
                 ...................
           }  
    =============================depts所有部门类=============================
               public static ArrayList queryAll(){
                       ArrayList deptsList=new ArrayList();
                       String sql="select deptno,dname from dept";
                       ResultSet rs=db.runSql(sql);
                       while(rs.next()) {
                            dept deptInstance=new dept();
                            deptInstance.setId(rs.getString(1));
                            deptInstance.setName(rs.getString(2));
                            deptsList.add(deptInstance);
                       }
                       return deptsList;
                }

               3)通过订单表查看订单明细表.可以定义一个类得到所有订单,定义一个订单类,里面有
                 多个订单明细类,定义订单明细类。(在定义订单类中通过超链接显示所有订单明细表)

               2)实现分页(创建一个用于分页的类,使用单例模式)
        ==============================分页类=================================
         public class emps  {
                   private int currentPage=1;
                   private final int pageSize=4; 
                   private static emps demo=null;
                   private emps(){
  
                    }
                    public static emps newInstance(){
                        if (demo==null) {
                                 demo=new emps();
                        }
                        return demo;
                    }
   
                    public   List getCurrentPageList() {

                           List list=new ArrayList();
                           String sql=String.format("select * from (select * from emp where empno not in

                                                                          (select empno from emp where rownum<=(%d-1)*%d))

                                                          where rownum<=%d",this.currentPage,this.pageSize,pageSize);
                           ResultSet rs=dbManager.RunHasResultSql(sql);
                           while(rs.next())  {
                                  emp empInstance=new emp();
                                  empInstance.setId(rs.getString(1));
                                  empInstance.setName(rs.getString(2));
                                  empInstance.setJob(rs.getString(3));
                                  list.add(empInstance);
                            }
                            return list;
  
                   }

                  public int getCurrentPage() {
                         return this.currentPage;
                  }

                  public void setCurrentPage(int currentPage){
                        switch(currentPage) {
                                   case 0://表示首页
                                            this.currentPage=1;
                                            break;
                                   case 1://表示上一页
                                             if (this.currentPage>1) {
                                                    this.currentPage--;
                                             }
                                             break;
                                   case 2: //表示下一页
                                               if (this.currentPage<this.getTotalPage()) {
                                                        this.currentPage++;
                                                }
                                                break;
                                   case 3: //表示末页
   
                                            this.currentPage=this.getTotalPage();
                                             System.out.print(this.getTotalPage());
                                             break;   
                           }
  
                   }
 
 public int getTotalPage()  {
         int rowCount=0,totalPages=0;
         String sql="select count(*) from emp";
         ResultSet rs=dbManager.RunHasResultSql(sql);
         if (rs.next())  {
              rowCount=rs.getInt(1);
         }
        if (rowCount%this.pageSize==0) {
              totalPages=rowCount/this.pageSize;
        } else {
              totalPages=rowCount/this.pageSize+1;
        }
 
        return totalPages;
  }
 
 public int getPageSize() {
      return pageSize;
 }
===============================jsp页面===================================
   <logic:notPresent name="emps">
   <c:set var="emps" value="<%=emps.newInstance().getCurrentPageList()%>" scope="request"/>
  </logic:notPresent> //注意使用<c:set>标签
 
   <logic:iterate id="empList" name="emps" indexId="index">


=============================================================================================
 
    <logic:Present>判断四种范围内的变量是否不存在


            格式: <logic:Present name="要判断的四种范围内的变量名">     做一些事件
                       </logic:Present>

 

    <logic:redirect/>重定向


             格式:<logic:redirect href="要重定向的页面"/>
             相当于 response.sendRedirect(),会丢失请求中的数据
               
             <logic:forward/>转发请求
                  格式:<logic:forward name="msg"/>    
                  说明:
                     1)name必须是在struts-config.xml文件中定义的全局forward
                     2)<jsp:forward page="msg.jsp">也相当于转发,但它没有全局forward的限制

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值