【mvc之前台优化标签】

news/2024/7/4 10:08:33

目录

  • 前言
    • index.jsp整体
    • z:tld自定义标签库
    • 标签助手类
      • checkbox标签助手类
      • pageTag标签助手类
      • selectTag助手类
    • 效果图
  • 总结

前言

这一篇是写前台如何使用自定义标签来优化代码

之前一篇是写后台优化代码的,【mvc之后台优化代码】

还是一样,纯代码。

index.jsp整体

<body>
	<div style="align-content: center">
		<form action="StudentAction.action?method=getAll" method="post" align="center">
		<a href="index.jsp">刷新</a>
			教员<z:select name="tid" textVal="tname" items="${TeacherList }" textKey="tid" headerTextKey="0" headerTextval="全部教员"></z:select>
			&nbsp;&nbsp;班级<z:select name="cid" textVal="cname" items="${ClassList }" textKey="cid" headerTextKey="0" headerTextval="全部班级"></z:select>	
			&nbsp;&nbsp;爱好:<z:checkbox items="${shobbys }" name="shobby"></z:checkbox>
			<br/>
			<input type="submit" value="查询" >
			<a href="add.jsp">增加</a>
		</form>
		
		<table border="1px" align="center" width="50%">
			<tr>
				<td>学生id</td>
				<td>学生姓名</td>
				<td>学生教员</td>
				<td>学生班级</td>
				<td>学生爱好</td>
				<td>操作</td>
			</tr>
			
			<c:if test="${not empty list }">
				<c:forEach items="${list }" var="g">
					<tr>
						<td>${g.sid }</td>
						<td>${g.sname }</td>
						<td>${g.tid }</td>
						<td>${g.cid }</td>
						<td>${g.shobby }</td>
						<td>
							<a href="StudentAction.action?method=loadStu&sid=${g.sid }">修改</a>
							<a href="StudentAction.action?method=deleteStu&sid=${g.sid }" onclick="return  confirm('你是否确定要删除?')==1">删除</a>
						</td>
					</tr>
				</c:forEach>
			</c:if>
			
		</table>
		<div align="center">
			<z:pageBean pagebean="${PageBean }"></z:pageBean>
		</div>
		
		
	</div>
</body>

z:tld自定义标签库

  <tag>
	    <name>select</name>
	    <tag-class>com.tag.selectTag</tag-class>
	    <body-content>JSP</body-content>
	     <attribute>
	        <name>id</name>
	        <required>false</required>
	        <rtexprvalue>false</rtexprvalue>
	    </attribute>
	    <attribute>
	        <name>name</name>
	        <required>false</required>
	        <rtexprvalue>false</rtexprvalue>
	    </attribute>
	    <attribute>
	        <name>items</name>
	        <required>true</required>
	        <rtexprvalue>true</rtexprvalue>
	    </attribute>
	     <attribute>
	        <name>textKey</name>
	        <required>true</required>
	        <rtexprvalue>false</rtexprvalue>
	    </attribute>
	    <attribute>
	        <name>textVal</name>
	        <required>true</required>
	        <rtexprvalue>false</rtexprvalue>
	    </attribute>
	    <attribute>
	        <name>selectedVal</name>
	        <required>false</required>
	        <rtexprvalue>true</rtexprvalue>
	    </attribute>
	    <attribute>
	        <name>headerTextKey</name>
	        <required>false</required>
	        <rtexprvalue>false</rtexprvalue>
	    </attribute>
	     <attribute>
	        <name>headerTextval</name>
	        <required>false</required>
	        <rtexprvalue>false</rtexprvalue>
	    </attribute>
	    
	  </tag>
  
		  <tag>
		    <name>pageBean</name>
		    <tag-class>com.tag.pageTag</tag-class>
		    <body-content>JSP</body-content>
		     <attribute>
		        <name>pagebean</name>
		        <required>true</required>
		        <rtexprvalue>true</rtexprvalue>
		    </attribute>
		  </tag>
  
    <tag>
	    <name>checkbox</name>
	    <tag-class>com.tag.CheckBoxTag</tag-class>
	    <body-content>JSP</body-content>
	     <attribute>
	        <name>items</name>
	        <required>true</required>
	        <rtexprvalue>true</rtexprvalue>
	    </attribute>
	     <attribute>
	        <name>selected</name>
	        <required>false</required>
	        <rtexprvalue>true</rtexprvalue>
	    </attribute>
	    
	    <attribute>
	        <name>name</name>
	        <required>true</required>
	        <rtexprvalue>true</rtexprvalue>
	    </attribute>
	    
	  </tag>
  

标签助手类

checkbox标签助手类

public class CheckBoxTag  extends BodyTagSupport{

	private static final long serialVersionUID = 1657191454649826759L;
	
	private List<Object>  items=new ArrayList<>();
	private String name;
	private List<Object> selected = new ArrayList<>();
	
	
	

	
	public List<Object> getItems() {
		return items;
	}
	public void setItems(List<Object> items) {
		this.items = items;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public List<Object> getSelected() {
		return selected;
	}
	public void setSelected(List<Object> selected) {
		this.selected = selected;
	}
	@Override
	public int doStartTag() throws JspException {
		JspWriter out = pageContext.getOut();
		try {
			out.write(toHtml());
		} catch (IllegalArgumentException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (InstantiationException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (NoSuchFieldException e) {
			e.printStackTrace();
		} catch (SecurityException e) {
			e.printStackTrace();
		}
		return SKIP_BODY;
	}
	private String toHtml() throws IllegalArgumentException, IllegalAccessException, InstantiationException, NoSuchFieldException, SecurityException {
		StringBuffer sb = new StringBuffer();
		
			for (Object it : items) {
	
				if(selected.contains(it)) {
					sb.append("<input  checked=\"checked\" type='checkbox' value ='"+it+"' name='"+name+"'  >"+it+"&nbsp;&nbsp;&nbsp;&nbsp;");
				}
				else {
					sb.append("<input type='checkbox' value ='"+it+"' name='"+name+"'  >"+it+"&nbsp;&nbsp;&nbsp;&nbsp;");
				}
		
		
			}
		return sb.toString();
	}
}

pageTag标签助手类

public class pageTag extends BodyTagSupport{

	private static final long serialVersionUID = -6466820558378004043L;

	public PageBean pagebean;

	public PageBean getPagebean() {
		return pagebean;
	}

	public void setPagebean(PageBean pagebean) {
		this.pagebean = pagebean;
	}
	
	@Override
	public int doStartTag() throws JspException {
		JspWriter out = pageContext.getOut();
		try {
			out.write(toHtml());
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return SKIP_BODY;
	}

	private String toHtml() {
		StringBuffer sb = new StringBuffer();
		
		//点击分页栏的时候要提交的表单
		sb.append(" <form id='pageBeanForm' action='"+pagebean.getUrl()+"' method='post'>");
		
		
		sb.append(" 	<input type='hidden' name='page' value = '"+pagebean.getPage()+"'>");
		Map<String, String[]> paramMap = pagebean.getParamMap();//将类里面的map集合实列化
		
		if(paramMap!=null&&paramMap.size()>0) {
			for (Entry<String, String[]> entry :  paramMap.entrySet()) {
				
				if(!"page".equals(entry.getKey())) {//因为上面已经将page参数放到上面去了
					for (String val : entry.getValue() ) {//在paramMap的键值队中值是一个数组,所以需要遍历
						sb.append(" 	<input type='hidden' name='"+entry.getKey()+"' value= '"+val+"'>");
					}
				}
			}
		}
		
//		<form id='pageBeanForm' action='http://localhost:8080/T224-pagebean/teacherList' method='post'>
//				<input type='hidden' name='rows' value= '"+val+"'>
//				<input type='hidden' name='url' value= '"+val+"'>
//				<input type='hidden' name='max' value= '"+val+"'>
//				<input type='hidden' name='page'value= '"+val+"'>
//				<input type='hidden' name='tname' value='晓'>
//		</form>
		
		sb.append(" </form>");
		//分页栏实际要操作的按钮
		
		sb.append(" <div style='text-align: center; font-size: 12px;'>");
		sb.append(" 每页"+pagebean.getRows()+"条,共"+pagebean.getTotal()+"条,第"+pagebean.getPage()+"页,共"+pagebean.getMaxPage()+"页&nbsp;&nbsp;<a href='javascript:gotoPage(1)'>首页</a>&nbsp;&nbsp;<a");
		sb.append(" href='javascript:gotoPage("+pagebean.getPreviousPage()+")'>上一页</a>&nbsp;&nbsp;<a");
		sb.append(" href='javascript:gotoPage("+pagebean.getNextPage()+")'>下一页</a>&nbsp;&nbsp;<a");
		sb.append(" href='javascript:gotoPage("+pagebean.getMaxPage()+")'>尾页</a>&nbsp;&nbsp;<input type='text'");
		sb.append(" id='skipPage'");
		sb.append(" style='text-align: center; font-size: 12px; width: 50px;'>&nbsp;&nbsp;<a");
		sb.append(" href='javascript:skipPage()'>Go</a>");
		sb.append(" </div>");
		

		
		
		//js代码块
		sb.append(" <script type='text/javascript'>");
		sb.append(" 	function gotoPage(page) {");
		sb.append("		  	document.getElementById('pageBeanForm').page.value = page;");
		sb.append(" 		document.getElementById('pageBeanForm').submit();");
		sb.append(" 	}");
		sb.append("		function skipPage() {");
		sb.append("			var page = document.getElementById('skipPage').value;");
		sb.append("			if(!page || isNaN(page) || parseInt(page)<1 || parseInt(page)>"+pagebean.getMaxPage()+"){");
		sb.append("				alert('请输入1~N的数字');");
		sb.append("				return;");
		sb.append("		}");
		sb.append("		gotoPage(page);");
		sb.append("		}");
		sb.append("	</script>");
		
		return sb.toString();
	}
	
}

selectTag助手类

/**
 * 1.值的传递 : id name
 * 2.数据源 : items
 * 3.展示列与数据存储列与实体类的对应关系: textKey textVal
 * 4.数据回显 selectedVal
 * 5.可能下拉框默认值(头标签)headerTextKey  headerTextVal
 * @author Lenovo
 *
 */
public class selectTag extends BodyTagSupport{

	private static final long serialVersionUID = -2985228892464897369L;
	
	private String id;//值的传递 : id name
	private String name;//值的传递 : id name
	private List<Object> items = new ArrayList<>();//数据源 : items
	private String textKey;//展示列与数据存储列与实体类的对应关系: textKey textVal
	private String textVal;//展示列与数据存储列与实体类的对应关系: textKey textVal
	private String selectedVal;//数据回显 selectedVal
	private String headerTextKey;//可能下拉框默认值(头标签)headerTextKey  headerTextVal
	private String headerTextval;//可能下拉框默认值(头标签)headerTextKey  headerTextVal
	
	
	
	
	public String getId() {
		return id;
	}


	public void setId(String id) {
		this.id = id;
	}


	public String getName() {
		return name;
	}


	public void setName(String name) {
		this.name = name;
	}


	public List<Object> getItems() {
		return items;
	}


	public void setItems(List<Object> items) {
		this.items = items;
	}


	public String getTextKey() {
		return textKey;
	}


	public void setTextKey(String textKey) {
		this.textKey = textKey;
	}


	public String getTextVal() {
		return textVal;
	}


	public void setTextVal(String textVal) {
		this.textVal = textVal;
	}


	public String getSelectedVal() {
		return selectedVal;
	}


	public void setSelectedVal(String selectedVal) {
		this.selectedVal = selectedVal;
	}


	public String getHeaderTextKey() {
		return headerTextKey;
	}


	public void setHeaderTextKey(String headerTextKey) {
		this.headerTextKey = headerTextKey;
	}


	public String getHeaderTextval() {
		return headerTextval;
	}


	public void setHeaderTextval(String headerTextval) {
		this.headerTextval = headerTextval;
	}


	@Override
	public int doStartTag() throws JspException {
		JspWriter out = pageContext.getOut();
		try {
			out.print(toHtml());
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return SKIP_BODY;
	}


	private StringBuffer toHtml() throws Exception {
		StringBuffer sb = new StringBuffer();//一个StringBuffer的类
		
		
		sb.append("<select id='"+id+"' name='"+name+"' >");//开头
		
		if(!(headerTextKey ==null|| headerTextval ==null || "".equals(headerTextKey)||"".equals(headerTextval))) {
			sb.append("<option  value= '"+headerTextKey+"'>");
			sb.append(headerTextval);
			sb.append("</option>");
		}//如果有默认的header就要加上的代码
		Object keyVal;
		Object Val;
		for (Object it : items) {
			keyVal =  PropertyUtils.getProperty(it, textKey);//找到这个对象的属性:id
			keyVal = keyVal+"";
			
			Val =  PropertyUtils.getProperty(it, textVal);//找到这个对象的属性:name
			Val = Val +"";	
			 
			 
			if(keyVal.equals(selectedVal)) {//判断回显的字符串
				sb.append("<option selected  value= '"+keyVal+"'>");
				sb.append(Val);
				sb.append("</option>");
			}
			else {
				sb.append("<option value= '"+keyVal+"'>");
				sb.append(Val);
				sb.append("</option>");
			}
		}
		
		sb.append("</select>");//结尾
		return sb;
	}
}

效果图

在这里插入图片描述


总结

在这之后差不多就基本完成优化了,但还是有点问题暂时没解决

Thanks♪(・ω・)ノ希望对大家有所帮助


http://www.niftyadmin.cn/n/3726051.html

相关文章

揭秘腾讯MTA SDK模块化发展历程

引语 SDK是一种方便常见的开发者工具形式&#xff0c;但越来越多的内嵌功能&#xff0c;可能让SDK服务越来越全&#xff0c;可能会出现功能的重复&#xff0c;造成SDK包越来越重&#xff0c;给App自身带来负担……为App减负&#xff0c;MTA踏上了探索的道路。 作者介绍 陈翔&am…

细说java_细说JAVA反射

Reflection 是 Java 程序开发语言的特征之一&#xff0c;它允许运行中的 Java 程序对自身进行检查&#xff0c;或者说“自审”&#xff0c;并能直接操作程序的内部属性。例如&#xff0c;使用它能获得 Java 类中各成员的名称并显示出来。JavaBean 是 reflection 的实际应用之一…

计算机绘画小房子教案,幼儿园中班美术教案《漂亮的小房子》绘画活动

《幼儿园中班美术教案《漂亮的小房子》绘画活动》由会员分享&#xff0c;可在线阅读&#xff0c;更多相关《幼儿园中班美术教案《漂亮的小房子》绘画活动(5页珍藏版)》请在人人文库网上搜索。1、幼儿园中班美术教案漂亮的小房子绘画活动 点击这里 活动目标&#xff1a;1、学习粘…

mysqldump与innobackupex备份过程你知多少(二)

mysqldump有什么坑吗&#xff1f;想必大家都知道&#xff0c;mysqldump备份时可以使用--single-transaction --master-data两个选项执行备份&#xff08;老实讲&#xff0c;为图方便&#xff0c;本人之前很长一段时间&#xff0c;生产库也是使用mysqldudmp远程备份的&#xff…

【前端UI框架】

目录前言AngularVueReact总结前言 |ू&#xff65;ω&#xff65; ) 哟&#xff0c;大家好&#xff0c; 因为最近要学EasyUI了&#xff0c;所以去找了一些有关EasyUI的信息。 这里先简单介绍下:EasyUI是一组基于jQuery的UI插件集合体 对&#xff0c;这个EasyUi是基于jQuery的…

Charles常用设置

一、软件说明Charles 通过将自己设置成系统的网络访问代理服务器&#xff0c;使得所有的网络访问请求都通过它来完成&#xff0c;从而实现了网络封包的截取和分析。二、mock数据场景说明&#xff1a;使用步骤&#xff1a;1、保存待测试URL的response至本地2、开启Map Local&…

java mvc controller_SpringMVC【开发Controller】详解

前言本文主要是讲解在Controller中的开发&#xff0c;主要的知识点有如下&#xff1a;编码过滤器使用注解开发注解RequestMapping详解业务方法接收参数字符串转日期重定向和转发返回JSONSpringMVC过滤编码器在SpringMVC的控制器中&#xff0c;如果没有对编码进行任何的操作&…

华为数通软件测试实习生干嘛的,【软件测试工程师是做什么的】华为2021年软件测试工程师岗位职责-看准网...

5G网络优化和规划工程师本人也是在面试之前看了很多面经&#xff0c;发现有价值&#xff0c;于是在拿到offer后也选择写一下。21本科应届生春招&#xff0c;部门是全球技术服务部&#xff0c;流程&#xff1a;综测-群面-业务面-英测-主管面(所有面试均为线上)一面为群面(总体感…