如果您只是使用纯 JSP(没有任何其他框架),那么我建议您创建自己的自定义 JSP 标记。一个field
标签和一个message
标签。这将有点重新发明轮子,因为许多框架都提供了类似的东西,如果这只是您的唯一要求,那么您可以尝试一下。
有Sun 的关于如何创建自己的标签的教程,虽然有点旧,但内部没有太大变化,而且,它可以与任何 servlet 容器一起使用,因为它是标准的一部分。
我将为您提供编写简单标签所需的线索,如果您认为需要它message
,我想您可以自己制作一个。field
基本方法
开始创建一个扩展TagSupport
抽象类并覆盖该doEndTag()
方法的基类。message
检查当前 pageContext 中是否有任何属性,如果存在,则通过标签的打印流打印该错误消息:
public class MessageTag extends TagSupport {
public int doEndTag() {
String message = pageContext.findAttribute("message");
if (message != null) {
StringBuilder output = new StringBuilder();
output.append("<small class=\"error\">").append(message).append("</small>");
JspWriter out = pageContext.getOut();
out.println(output.toString());
}
return EVAL_PAGE;
}
}
然后按照上一个教程中的步骤在你的 webapp 中定义标签库并在你的 JSP 中使用它:
<label>Field name</label>
<input type="text" name="field-name">
<mytags:message />
真实世界
那将是最简单的方法。但是在现实世界的场景中,您希望根据您正在验证的字段显示不同的错误消息,因此我将向name
标记类添加一个属性(或类似的东西)并使其能够根据以下内容查找不同的消息该属性的值:
public class MessageTag extends TagSupport {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void release() {
super.release();
name = null;
}
public int doEndTag() {
String lookupAttr = (name != null ? name : "message");
String message = pageContext.findAttribute(lookupAttr);
if (message != null) {
StringBuilder output = new StringBuilder();
output.append("<small class=\"error\">").append(message).append("</small>");
JspWriter out = pageContext.getOut();
out.println(output.toString());
}
return EVAL_PAGE;
}
}
这样您就可以为每个特定字段重用您的标签:
<label>Field name</label>
<input type="text" name="field-name">
<mytags:message name="field-name" />
请注意,您还需要将属性定义添加到标签库中。
显然,您可以根据需要将其复杂化(即:添加一个style
允许您显示 INFO、WARNING 或 ERROR 消息等的属性)