public class ThisIsExampleTag extends TagSupport { //输入的字符串值存在这里 private String m_content = "";
public String getContent() { return m_content; } //页面提交的值用这个方法传给m_content public void setContent(String aContent) { m_content = aContent; }
public int doStartTag() { int flag = -1; //这里判断输入的字符串是否是数字 flag = testInputStr(m_content); //如果是则使用JspWriter将警告信息返回 //简单举个例子 try { JspWriter out = pageContext.getOut(); out.println(getMsg(flag)); //或者返回输入页面 //out.println("<%"); //out.println("response.sendRedirect(...)"); //out.println("return"); //out.println("%>"); //最好将已经输入的值保存起来
<%@ taglib uri="tlds/number.tld" prefix="nm" %>
<%
String sName =request.getParameter("sName");
if(sName==null)
sName ="100";
%>
<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<TITLE>
计数器演示程序
</TITLE>
</HEAD>
<BODY>
<form action="a.jsp" method = post>
<input type = text name = "sname" value="<%=sName%>"><BR><BR>
<input type = submit name = "submit" value="验证">
<nm:numbercheck tagName="sname"/>
</form></BODY>
</HTML>systemErr.jsp
<%@ page
language="java"
isErrorPage="true"
contentType="text/html; charset=gb2312" %>
<html>
<head>
<title>错误讯息</title>
<meta http-equiv="Content-Type"
content="text/html; charset=gb2312">
</head>
<body bgcolor="#CCCCCC">
<div align="center">
<p><font size="6" face="标楷体">
<b>错误讯息</b>
</font></p>
<p> </p>
<p><font face="标楷体" size="6">
<%=exception.getMessage()%>
</font></p>
<p> </p>
<a href="a.jsp">
返回</a>
</div>
</body>
</html>number.tld
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE taglib
PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"
"http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd"><taglib> <!-- ============== Tag Library Description Elements ============= --> <tlibversion>1.0</tlibversion>
<jspversion>1.1</jspversion>
<shortname>number</shortname>
<!-- ============== number ============= -->
<tag>
<name>numbercheck</name>
<tagclass>counter.testTag</tagclass>
<bodycontent>empty</bodycontent>
<attribute>
<name>tagName</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>
package counter;import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;
import javax.servlet.http.HttpServletRequest;
import java.lang.*;public class testTag extends TagSupport{ String tagName = null; public void settagName(String TagName){
this.tagName = TagName;
}
public int doStartTag() throws JspTagException{
HttpServletRequest request = (HttpServletRequest)pageContext.getRequest();
try{
if(request.getParameter(tagName) != null){
Double tagValue = Double.valueOf(request.getParameter(tagName));
}
}catch(NumberFormatException e){
throw new JspTagException("类型不准确");
}
return(EVAL_PAGE);
}
}
{
//输入的字符串值存在这里
private String m_content = "";
public String getContent()
{
return m_content;
} //页面提交的值用这个方法传给m_content
public void setContent(String aContent)
{
m_content = aContent;
}
public int doStartTag()
{
int flag = -1;
//这里判断输入的字符串是否是数字
flag = testInputStr(m_content);
//如果是则使用JspWriter将警告信息返回
//简单举个例子
try
{
JspWriter out = pageContext.getOut();
out.println(getMsg(flag));
//或者返回输入页面
//out.println("<%");
//out.println("response.sendRedirect(...)");
//out.println("return");
//out.println("%>");
//最好将已经输入的值保存起来
}
catch(IOException e)
{
}
return (SKIP_BODY);
}
/**
*判断输入字符串是否数字
*/
public void testInputStr(String aContent)
{
//判断字符串的是否全为数字
//是则返回1
//否则返回0
//如果为空返回-1
}
/**
*使用脚本的alert()提示消息
*/
public String getMsg(int flag)
{
StringBuffer sb = new StringBuffer();
if(flag=0)
{
//这里组合提示消息脚本
//sb.append(...)
return sb;
}
if(flag=1)
{
//校验成功
...
}
if(flag=-1)
{
//输入为空
}
}
}要将值传到tag中
需要一个中转页面来调用这个tag
<tld:tag m_content=<%上个页面提交的值%>>如果需要同时校验多个值
需要建立一个对象来存储提交的所有值
例如InfValueBean
public class InfValueBean implements Serializable
{
private m_age = "";
private m_number = "";
//get和set方法
//getAge() setAge()
//getNumber() setNumber()
}此时ThisIsExampleTag改为
{
private InfValueBean m_content = new InfValueBean();
...
//testInputStr()必须更改
public void testInputStr(String aContent)
{
//调用对象中字符串值来校验
//m_content.getAge()
//m_content.getNumber()
}
}对于校验输入是否是数字最好的办法是脚本
将数据提交到服务器端才进行判断
既没有效率又增加服务器的负担
对于你说的“因为还有一些别的东东一起做成TAG了”
应该是你们的tag没有按照模块规划好
这种纯粹是耦合现象
必须在设计时就避免
可是使用HttpServletRequest类取得页面上控件值
但是同样没有效率
function OnlyNums(num){
//只能输入数字和小数点
var this_obj=eval('document.AddForm.cardID'+num)
var sn=this_obj.value
var valid_char='0123456789.' for (i=0;i<=sn.length;i++) {
var the_char=sn.charAt(i)
if(valid_char.indexOf(the_char)==-1){
this_obj.value=sn.substring(0,i)
return 1
}
}
if(this_obj.value!=sn) this_obj.value=sn
}
</script><form name="AddForm" method="post">
<input name="cardID1" type="text" id="cardID1" onkeyup="return OnlyNums(1)">
</form>