【mvc之前台优化标签】

本文介绍如何使用自定义JSP标签库优化前端代码,包括select、checkbox和分页标签的实现,以及它们在查询和展示学生信息时的应用。

前言

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

之前一篇是写后台优化代码的,【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♪(・ω・)ノ希望对大家有所帮助

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值