`
jiangduxi
  • 浏览: 453229 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

多个标签的嵌套

阅读更多
在实际的开发中,往往需要多个标签嵌套以完成一个任务,这样的标签就存在父子关系。我们可以开发出和流程控制相关的标签,例如:
  <mt:switch value="test">
      <mt:case value="test1">
          my value is test1
      </mt:case>
      <mt:case value="test">
          my valie is test
      </mt:case>
  </mt:switch>

在上面的标签中,<mt:switch>为父标签,<mt:case>为子标签,一个父标签可以嵌套多个子标签和HTML,Scriptlets。
具体代码如下:
  package com.test.ch14
  import javax.servlet.jsp.*;
  import javax.servlet.jsp.tagext.*;
  import java.util.Hashtable;
  import java.io.Writer;
  import java.io.IOException;

public class IfTag extends BodyTagSupport
{
  private boolean value;
  
  public void setValue(boolean value){
      this.value = value;
   }
   /**
    *doStartTag方法,如果value为true,那么就计算TagBody的值,否则不计算
    */
   public int doStartTag() throws JspTagException{
     if(value)
     {
        System.out.println("value is true");
        return EVAL_BODY_INCLUDE;
      }else{
        System.out.println("value is false");
        return SKIP_BODY;
      }
    }
   
    //覆盖doEndTag方法
    public int doEndTag() throws JspTagException
   {
      try{
           if(bodyContent != null){
               bodyContent.writeOut(bodyContent.getEnclosingWriter());
             }
           }catch(java.io.IOException e){
               throw new JspTagException("IO Error:" +e.getMessage());
            }
         return EVAL_PAGE;
    }
}

Value为IfTag的属性。当Value为true时,那么就计算IfTagBody;如果Value的值为false;那么忽略IfTagBody中的Tag。
在这个例子中,IfTag标签中嵌套了一个子标签,这个子标签用于输出一些信息到客户端,下面在看IfTag中嵌套的子标签,例如:
 package com.test.ch14;
 import javax.servlet.jsp.*;
 import javax.servlet.jsp.tagext.*;
 import java.util.Hashtable;
 import java.io.Writer;
 import java.io.IOException;

 public class OutTag extends TagSupport
 {
   private Object value;
  
  //覆盖doStartTag方法
  public void setValue(Object value){
    this.value = value;
   }

  public int doStartTag() throws JspTagException{
   return EVAL_BODY_INCLUDE;
  }
  //覆盖doEndTag方法
  public int doEndTag() throws JspTagException
  {
    try{
           System.out.println(value);
           pageContext.getOut().write(value.toString());
         }catch(IOException ex){
           throw new JspTagException("Fatal error: hello tag conld not write to JSP out");
          }
    return EVAL_PAGE;
    }
  }

OutTag就是一个简单的不带Body的标签,它主要向客户端输出一些信息。下面需要更新标签描述文件,加入以下内容。
 <tag>
     <name>if</name>
     <tag-class>com.test.ch14</tag-class>
     <body-content>jsp</body-content>
         <attribute>
           <name>value</name>
           <required>true</required>
           <rtexprvalue>true</rtexprvalue>
         </attribute>
 </tag>
 <tag>
    <name>out</name>
     <tag-class>com.test.ch14.OutTag</tag-class>
     <body-content>jsp</body-content>
         <attribute>
           <name>value</name>
           <required>true</required>
           <rtexprvalue>true</rtexprvalue>
         </attribute>
 </tag>

接下来编写一个使用嵌套标签的JSP。例如
 <%@ taglib uri="/demotag" prefix="mt"%>
 <html>
 <head>
 <title>vcorwork tag</title>
 <meta http-equiv="Content-Type" content="text/html;charset=gb2312">
 </head>
 <body>
 <HR>
 协作标签<br>
 <%
   boolean test = true;
   String outValue = "HelloWorld"
  %>
  <mt:if value="<%=test%>">
   <mt:out value="<%= outValue%>">
    这是mt:out....>打印出的内容。
   </mt:out>
  </mt:if>
 <HR>
 <mt:if value="fale">
  <mt:out value="<%=outValue%>">
   这些内容不会显示在客户端。
  </mt:out>
 </mt:if>
 </body>
 </html>
分享到:
评论

相关推荐

    XHTML标签的嵌套规则.pdf

    例如,如果有多个标签嵌套,应该从最内层的标签开始闭合,然后依次向外闭合。 此外,XHTML文档的结构本身也有一定的规范。一个基本的XHTML文档通常包含文档类型声明(DOCTYPE),、和三个主要部分。标签是文档的根...

    多层tab标签嵌套支持无连接分类

    综上所述,“多层tab标签嵌套支持无连接分类”是一个涉及HTML、CSS、JavaScript等多个技术领域的实践项目,旨在提供一种高效、灵活且用户友好的多级导航方案。通过熟练掌握上述知识点,开发者可以构建出更加复杂和...

    Struts标签 解说和练习

    3. 标签嵌套:可以将多个标签嵌套使用,例如在`&lt;html:form&gt;`中嵌套`&lt;html:text&gt;`。 4. 表单验证:结合Struts的验证框架,可以在服务器端进行表单数据的校验。 四、实战练习 1. 创建一个简单的登录表单,使用`...

    多进程窗口嵌套

    在IT领域,多进程窗口嵌套是一种常见的编程技术,它涉及到操作系统、进程间通信(IPC)以及用户界面设计等多个方面。下面将详细解释这个主题。 首先,我们要理解“多进程”这一概念。在计算机系统中,进程是程序的...

    多个fragment嵌套,返回上级fragment例子

    在复杂的用户界面设计中,我们经常会遇到Fragment的嵌套问题,即一个Fragment内部包含另一个或多个Fragment。这种场景在创建一个多层级、模块化的界面时非常常见。本示例将详细讲解如何实现“多个fragment嵌套,返回...

    JS获取元素多层嵌套思路详解

    如果一段html嵌套过多,在js中获取还是比较麻烦的,我写了几套方案,大家可以参考参考,如果你有好的方法,也分享出来,让我们瞧瞧。 HTML: &lt;!DOCTYPE html&gt; &lt;html lang=en&gt; &lt;head&gt; &lt;meta ...

    SpringBoot_Freemarker生成Word_多个表格+两层嵌套循环

    SpringBoot_Freemarker生成Word_多个表格+两层嵌套循环; 步骤说明: 1.用Microsoft Office Word打开word原件;将文档中需要动态生成的内容,替换为属性名 ${name} 2.另存为,选择保存类型Word 2003 XML 文档(*....

    同一页面多个Tab选项卡嵌套显示实例

    同一页面多个Tab选项卡的嵌套显示实例是这种设计模式的一种进阶应用,它能够更好地管理复杂的网页结构。下面我们将详细探讨Tab选项卡的实现原理、设计原则以及如何创建嵌套的Tab选项卡。 一、Tab选项卡的实现原理 1...

    多级嵌套选项卡_多级嵌套舌签Tabs

    "选项卡"(Tabs)是网页设计中的一个重要组件,它将内容分隔成多个独立的部分,每个部分对应一个标签。用户点击某个标签时,对应的区域内容会被显示,其他区域则被隐藏。这种设计提高了页面的空间利用率,使得用户...

    mybatis 多层级collection嵌套.docx

    - `Car`对象拥有一个`light`属性,这是一个List类型的集合,包含了多个`Light`对象。在MyBatis的映射文件中,我们需要定义一个`resultMap`来映射`Car`对象,并使用`&lt;collection&gt;`标签来处理`light`属性。例如: ``...

    织梦的一个列表嵌套循环读取

    在处理嵌套循环时,我们可以利用这两个标签的组合来实现。 1. **{dede:channel} 标签**:此标签主要用于获取当前频道的信息,包括频道ID、名称、类型等,并且可以递归获取子频道。在处理导航嵌套时,可以通过设置`...

    无bug带属性填充包括对象嵌套属性填充与多文件上传及所有标签

    标题和描述中的"无bug带属性填充包括对象嵌套属性填充与多文件上传及所有标签"涉及到多个关键知识点,我们将逐一进行详解。 首先,"属性填充"是程序设计中的一种常见操作,尤其是在对象模型构建时。它指的是为一个...

    帝国CMS灵动标签PHP代码实现标签无限嵌套的效果

    在编程中,嵌套标签指的是在一个标签内部再包含另一个或多个标签。在帝国CMS中,灵动标签通常用于从数据库中提取信息并展示在网页上。如果这些标签被嵌套使用,就可以实现更为丰富的内容展示和更复杂的逻辑操作。 ...

    实现DataGrid多层嵌套.doc

    在某些场景下,我们可能需要实现DataGrid的多层嵌套,这通常发生在数据结构具有层次性的情况下,比如产品分类,每个产品可能有多个子分类,子分类又可能有更细的分类。在给定的文件描述中,提到了一个产品分类的例子...

    Android 嵌套TabHost示例

    对于嵌套的TabHost,即“两层TabHost”,我们需要在第一个TabHost的每个标签下再添加一个TabHost,形成二级菜单的效果。下面是一个简单的实现步骤: 1. 在主TabHost中,为每个标签创建一个新的Activity或者Fragment...

    Activity嵌套fragment大全,activity加载单个fragment,TabLayout+ViewPager实现多个fragment滑动效果

    TabLayout通常用于显示多个标签,而ViewPager则负责页面的滑动切换。结合这两者,我们可以创建一个可以滑动切换的Fragment集合。 1. 创建FragmentPagerAdapter:这将帮助我们管理并提供要显示的Fragment列表。 ```...

    freeMark if嵌套

    除了`&lt;#if&gt;`和`&lt;#else&gt;`,FreeMarker还提供了`&lt;#elseif&gt;`,用于在多个条件中选择执行其中一个: ```html ()&gt; &lt;p&gt;You are an admin. ()&gt; &lt;p&gt;You are an editor. &lt;p&gt;You are a regular user. ``` 在这个例子中...

    Fragment的嵌套和侧滑菜单DrawerLayout加标签页的使用demo

    SlidingTabLayout可以帮助用户在多个Fragment之间进行平滑切换,每个Fragment代表一个标签页的内容。在本项目中,标签页的设计增强了用户体验,使得用户可以方便地在不同内容间导航。 在实际开发中,这个项目的实现...

    kettle解析xml多层分组嵌套数据,StAX方法,完整解析案例(包含xml文件以及ktr文件)

    kettle 解析xml数据,xml多层分组嵌套,xml stax方法,完整解析案例使用(包含xml文件以及ktr文件)。ETL大数据迁移,数据清洗。XML Input Stream (StAX) 方法

Global site tag (gtag.js) - Google Analytics