在Java中,JSP中的自定义呈现基于没有instanceof的类的类型,可以使用JSP标签库(Tag Library)来实现。JSP标签库是一组自定义的JSP标签,可以用来扩展JSP的功能。
在这种情况下,可以创建一个自定义的JSP标签库,其中包含一个标签,该标签可以根据对象的类型来呈现不同的内容。在标签处理器中,可以使用Java的反射API来获取对象的类型,并根据类型执行相应的操作。
例如,可以创建一个名为“display”的标签,该标签可以接受一个对象作为参数,并根据对象的类型来呈现不同的内容。在标签处理器中,可以使用instanceof关键字来检查对象是否属于特定的类型,并根据结果执行相应的操作。
以下是一个示例标签库定义:
<taglib xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
version="2.1">
<tlib-version>1.0</tlib-version>
<short-name>DisplayTagLib</short-name>
<uri>http://example.com/display</uri>
<tag>
<name>display</name>
<tag-class>com.example.DisplayTagHandler</tag-class>
<body-content>empty</body-content>
<attribute>
<name>object</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>
在上面的示例中,定义了一个名为“DisplayTagLib”的标签库,其中包含一个名为“display”的标签。该标签接受一个名为“object”的属性,该属性必须是一个表达式,并且标签的主体内容为空。
以下是一个示例标签处理器实现:
public class DisplayTagHandler extends SimpleTagSupport {
private Object object;
public void setObject(Object object) {
this.object = object;
}
@Override
public void doTag() throws JspException, IOException {
if (object instanceof String) {
JspWriter out = getJspContext().getOut();
out.write("<p>String: " + object + "</p>");
} else if (object instanceof Integer) {
JspWriter out = getJspContext().getOut();
out.write("<p>Integer: " + object + "</p>");
} else {
JspWriter out = getJspContext().getOut();
out.write("<p>Unknown type: " + object.getClass().getName() + "</p>");
}
}
}
在上面的示例中,实现了一个名为“DisplayTagHandler”的标签处理器类,该类继承自SimpleTagSupport类。在doTag()方法中,使用Java的反射API来检查对象的类型,并根据类型执行相应的操作。
以下是一个示例JSP页面,其中使用了上面定义的标签库和标签:
<%@taglib prefix="display" uri="http://example.com/display"%>
<html>
<head>
<title>Display Tag Library Example</title>
</head>
<body>
<display:display object="Hello, world!" />
<display:display object="42" />
<display:display object="${pageContext.request}" />
</body>
</html>
在上面的示例中,使用了前面定义的标签库和标签,分别传递了一个字符串、一个整数和一个HttpServletRequest对象作为参数。标签处理器会根据对象的类型来呈现不同的内容。
云+社区沙龙online第5期[架构演进]
云+社区沙龙online第6期[开源之道]
云+社区技术沙龙[第28期]
高校公开课
Elastic 中国开发者大会
技术创作101训练营
云+社区技术沙龙[第10期]
云+社区技术沙龙[第17期]
领取专属 10元无门槛券
手把手带您无忧上云