现在的位置: 首页 > 综合 > 正文

Switch的实现

2012年11月30日 ⁄ 综合 ⁄ 共 4832字 ⁄ 字号 评论关闭

Switch的实现与If(){...}else if(){...}else{...}差不多,但又有区别,Switch语句中的逻辑比较多且有些乱,至少我是这样认为的。

在Switch中,有多个Case语句,有一个default,还有break语句,若case语句后没有break语句,则后面的条件无需匹配,直接执行。直到遇到break或default语句,用语言描述很容易理解,但用代码实现还是有些困难的。下面就是实现Switch功能的代码:

Demo.java

package class3g.tag.demo;

public class Demo {

 public static void main(String[] args) {

  switch(2){

  case 1:

   System.out.println("111111111");

   break;

  case 2:

   System.out.println("222222222");   

  case 3:

   System.out.println("333333333");

   break;   

  default:

   System.out.println("ddddddddd");

   

  

  }

  

 }

}

MySwitchTag.java

package class3g.web.tag;

import java.io.IOException;

import javax.servlet.jsp.JspException;

import javax.servlet.jsp.tagext.SimpleTagSupport;

public class MySwitchTag extends SimpleTagSupport {

 private int exp;

 

 private boolean lastCase_break = false;  //上一个标签的break状态

 private boolean lastCase_done = false;  //上一个标签的执行状态

 

 private boolean terminate = false;

 

 public boolean isLastCase_break() {

  return lastCase_break;

 }

 public void setLastCase_break(boolean lastCase_break) {

  this.lastCase_break = lastCase_break;

 }

 public boolean isLastCase_done() {

  return lastCase_done;

 }

 public void setLastCase_done(boolean lastCase_done) {

  this.lastCase_done = lastCase_done;

 }

 public boolean isTerminate() {

  return terminate;

 }

 public void setTerminate(boolean terminate) {

  this.terminate = terminate;

 }

 public int getExp() {

  return exp;

 }

 public void setExp(int exp) {

  this.exp = exp;

 }



 @Override

 public void doTag() throws JspException, IOException {

  this.getJspBody().invoke(null);

 }



}

MyCaseTag.java

package class3g.web.tag;

import java.io.IOException;

import javax.servlet.jsp.JspException;

import javax.servlet.jsp.tagext.SimpleTagSupport;

public class MyCaseTag extends SimpleTagSupport {

 private int value;

 private boolean breakSwitch;

 public void setValue(int value) {

  this.value = value;

 }

 public void setBreakSwitch(boolean breakSwitch) {

  this.breakSwitch = breakSwitch;

 }

 @Override

 public void doTag() throws JspException, IOException {

  MySwitchTag parent = (MySwitchTag) this.getParent();

  if (parent.isTerminate() == false) {

   if (parent.isLastCase_done() == false) {

    if (parent.getExp() == value) {

     this.getJspBody().invoke(null);

     parent.setLastCase_done(true);

     parent.setTerminate(breakSwitch);

    }

   } else {

    if (parent.isLastCase_break() == false) {

     this.getJspBody().invoke(null);

     parent.setLastCase_done(true);

     parent.setLastCase_break(breakSwitch);

     parent.setTerminate(breakSwitch);

    }

   }

  }

 }

}

MyDefaultTag.java

package class3g.web.tag;

import java.io.IOException;

import javax.servlet.jsp.JspException;

import javax.servlet.jsp.tagext.SimpleTagSupport;

public class MyDefaultTag extends SimpleTagSupport {

 @Override

 public void doTag() throws JspException, IOException {

  MySwitchTag parent =  (MySwitchTag) this.getParent();

  if(parent.isTerminate() == false){

   this.getJspBody().invoke(null);

   parent.setTerminate(true);

  }

 }

}

g.tld

<?xml version="1.0" encoding="UTF-8" ?>

<taglib xmlns="http://java.sun.com/xml/ns/j2ee"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"

    version="2.0">

    

    <description>There are my custom tags.</description>

    <tlib-version>1.0</tlib-version>

    <short-name>g</short-name>

    <uri>http://www.class3g.com</uri>

    

    

    <tag>

  <description>switch tag</description>

        <name>switch</name>

  <tag-class>class3g.web.tag.MySwitchTag</tag-class>

  <body-content>scriptless</body-content>

  <attribute>

   <name>exp</name>

   <required>true</required>

   <rtexprvalue>true</rtexprvalue>

  </attribute>

    </tag>

    

    

    <tag>

  <description>case tag </description>

        <name>case</name>

  <tag-class>class3g.web.tag.MyCaseTag</tag-class>

  <body-content>scriptless</body-content>

  <attribute>

   <name>value</name>

   <required>true</required>

   <rtexprvalue>true</rtexprvalue>

  </attribute>

  <attribute>

   <name>breakSwitch</name>

   <required>true</required>

   <rtexprvalue>true</rtexprvalue>

  </attribute>

    </tag>

    

    <tag>

  <description>default </description>

        <name>default</name>

  <tag-class>class3g.web.tag.MyDefaultTag</tag-class>

  <body-content>scriptless</body-content>

    </tag>

</taglib>

index.jsp

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

<%@taglib uri="http://www.class3g.com"
prefix="g" %>

<%

String path = request.getContextPath();

String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

  <head>

    <base href="<%=basePath%>">

    

    <title>My JSP 'index.jsp' starting page</title>

 <meta http-equiv="pragma" content="no-cache">

 <meta http-equiv="cache-control" content="no-cache">

 <meta http-equiv="expires" content="0">    

 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">

 <meta http-equiv="description" content="This is my page">

 <!--

 <link rel="stylesheet" type="text/css" href="styles.css">

 -->

  </head>

  

  <body>

  

抱歉!评论已关闭.