首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

JSP中的自定义呈现基于没有instanceof的类的类型

在Java中,JSP中的自定义呈现基于没有instanceof的类的类型,可以使用JSP标签库(Tag Library)来实现。JSP标签库是一组自定义的JSP标签,可以用来扩展JSP的功能。

在这种情况下,可以创建一个自定义的JSP标签库,其中包含一个标签,该标签可以根据对象的类型来呈现不同的内容。在标签处理器中,可以使用Java的反射API来获取对象的类型,并根据类型执行相应的操作。

例如,可以创建一个名为“display”的标签,该标签可以接受一个对象作为参数,并根据对象的类型来呈现不同的内容。在标签处理器中,可以使用instanceof关键字来检查对象是否属于特定的类型,并根据结果执行相应的操作。

以下是一个示例标签库定义:

代码语言:txt
复制
<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”的属性,该属性必须是一个表达式,并且标签的主体内容为空。

以下是一个示例标签处理器实现:

代码语言:txt
复制
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页面,其中使用了上面定义的标签库和标签:

代码语言:txt
复制
<%@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对象作为参数。标签处理器会根据对象的类型来呈现不同的内容。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

推断js类型:typeof instanceof constructor prototype

怎样推断js类型呢,先举几个样例: var a = “jason”; var b = 123; var c = true; var d = [1,2,3]; var e = new Date...,对不同操作数,它返回不同结果,另外typeof能够推断function类型;在推断除Object类型对象时比較方便。...在JavaScript,特殊数字类型还有几种: Infinity //表示无穷大特殊值 NaN //特殊非数字值...,或一个变量是否为一个对象实例:instanceof 注意:instanceof 后面一定要是对象类型,而且大写和小写不能错,该方法适合一些条件选择或分支。...总结: 通常情况下用typeof推断就能够了,遇到预知Object类型情况能够选用instanceof或constructor方法,简单总结下,欢迎补充!

1.3K10

java instanceof用法_Java类型判断几种方式

参考链接: Java instanceof 1. 前言   在Java这种强类型语言中类型转换、类型判断是经常遇到。今天就细数一下Java类型判断方法方式。   ...2. instanceof   instanceof是Java一个运算符,用来判断一个对象是否为一个实例 。...Number   此外编译器会检查instanceof表达式 obj 能否能转换成右边Class类型,如果无法转换则会直接报错,如果不能确定类型,也会通过编译。   ...该方法是在Java 1.1引入,因为它可以动态地使用。如果参数不为null,并且可以在不引发ClassCastException情况下成功将其强制转换为左边引用类型时将返回true。   ...//true boolean primitive = int.class.isPrimitive();  它是来解决我们在本文章节2提到基础类型判断问题。

1.4K20
  • jsp 自定义标签解决jsp页面int时间戳时间格式化问题

    jsp 自定义标签解决jsp页面int时间戳时间格式化问题 之前在项目中根据需求,需要自定义标签,经过查询w3c文档,自己也踩了一些坑,特此记录自定义标签步骤,下面就以我之前一个例子定义一个时间转换标签为例...在项目中src建一个com.xiangmuming.tags包,里面建一个DateTag.java,内容为: 此类内容参考地址,在引入时候也可以参考此文章在web.xml配置一下标签路径,这里我没有配置这个...如果返回EVAL_BODY_TAG则会再次设置标签体内容,直到返回SKIP_BODY; 如果返回EVAL_PAGE则标签体执行完后会继续执行JSP页面接下来部分; 如果返回SKIP_PAGE,则JSP...-- 代表标签库版本号 --> 1.2 mt //其中${ time }是一个int类型时间戳变量

    1.7K20

    jsp 自定义标签解决jsp页面int时间戳时间格式化问题

    jsp 自定义标签解决jsp页面int时间戳时间格式化问题 之前在项目中根据需求,需要自定义标签,经过查询w3c文档,自己也踩了一些坑,特此记录自定义标签步骤,下面就以我之前一个例子定义一个时间转换标签为例...在项目中src建一个com.xiangmuming.tags包,里面建一个DateTag.java,内容为: 此类内容参考地址,在引入时候也可以参考此文章在web.xml配置一下标签路径,这里我没有配置这个...如果返回EVAL_BODY_TAG则会再次设置标签体内容,直到返回SKIP_BODY; 如果返回EVAL_PAGE则标签体执行完后会继续执行JSP页面接下来部分; 如果返回SKIP_PAGE,则JSP...-- 代表标签库版本号 --> 1.2 mt //其中${ time }是一个int类型时间戳变量

    1.7K10

    jsp 自定义标签解决jsp页面int时间戳时间格式化问题

    jsp 自定义标签解决jsp页面int时间戳时间格式化问题 之前在项目中根据需求,需要自定义标签,经过查询w3c文档,自己也踩了一些坑,特此记录自定义标签步骤,下面就以我之前一个例子定义一个时间转换标签为例...在项目中src建一个com.xiangmuming.tags包,里面建一个DateTag.java,内容为: 此类内容参考地址,在引入时候也可以参考此文章在web.xml配置一下标签路径,这里我没有配置这个...如果返回EVAL_BODY_TAG则会再次设置标签体内容,直到返回SKIP_BODY; 如果返回EVAL_PAGE则标签体执行完后会继续执行JSP页面接下来部分; 如果返回SKIP_PAGE,则JSP...-- 代表标签库版本号 --> 1.2 mt //其中${ time }是一个int类型时间戳变量

    1.4K20

    jsp 自定义标签解决jsp页面int时间戳时间格式化问题

    jsp 自定义标签解决jsp页面int时间戳时间格式化问题 之前在项目中根据需求,需要自定义标签,经过查询w3c文档,自己也踩了一些坑,特此记录自定义标签步骤,下面就以我之前一个例子定义一个时间转换标签为例...在项目中src建一个com.xiangmuming.tags包,里面建一个DateTag.java,内容为: 此类内容参考地址,在引入时候也可以参考此文章在web.xml配置一下标签路径,这里我没有配置这个...如果返回EVAL_BODY_TAG则会再次设置标签体内容,直到返回SKIP_BODY; 如果返回EVAL_PAGE则标签体执行完后会继续执行JSP页面接下来部分; 如果返回SKIP_PAGE,则JSP...-- 代表标签库版本号 --> 1.2 mt //其中${ time }是一个int类型时间戳变量

    1.8K10

    jsp 自定义标签解决jsp页面int时间戳时间格式化问题

    jsp 自定义标签解决jsp页面int时间戳时间格式化问题 之前在项目中根据需求,需要自定义标签,经过查询w3c文档,自己也踩了一些坑,特此记录自定义标签步骤,下面就以我之前一个例子定义一个时间转换标签为例...在项目中src建一个com.xiangmuming.tags包,里面建一个DateTag.java,内容为: 此类内容参考地址,在引入时候也可以参考此文章在web.xml配置一下标签路径,这里我没有配置这个...如果返回EVAL_BODY_TAG则会再次设置标签体内容,直到返回SKIP_BODY; 如果返回EVAL_PAGE则标签体执行完后会继续执行JSP页面接下来部分; 如果返回SKIP_PAGE,则JSP...-- 代表标签库版本号 --> 1.2 mt //其中${ time }是一个int类型时间戳变量

    1.6K20

    python自定义异常使用

    手动抛出异常关键词raise 异常系统关键词exception 本节知识视频教程 自定义异常 1.自定义 2.继承系统异常基exception 3.自定义异常构造函数等方法进行处理 举例...: 自定义一个我异常MyException 这是一个最简单异常 class MyException(Exception): pass 案例:判断输入情况 如果不是数值就抛出异常。...if not a.isdigit(): raise MyException("异常:输入不是数值!") 总结强调: 1.自定义异常。 2.掌握如何利用自定义异常。...3.利用自定义异常构造方法,进行异常数值提示。...本节知识源代码: #自定义异常 class MyException(Exception): def __init__(self,a): self.a=a #最简单异常使用

    1.8K30

    自定义属性包装类型添加 @Published 能力

    ,但适用于 NSUbiquitousKeyValueStore ),来展示如何为其他自定义属性包装类型添加可访问包裹其实例属性或方法能力。...objectWillChange 时机来讲,下面的代码与上面的代码表现是一样,但在 @Published 版本,我们并没有为 @Published 提供包裹其实例,它是隐式获得。...在有关 Property Wrappers 文档,对于如何在属性包装类型引用包裹其实例是有特别提及 —— Referencing the enclosing 'self' in a wrapper...propertyWrapper 来自定义属性包装类型。...但只要穿越其魔法屏障就会发现,或许并没有想象那么玄奥。 希望本文能够对你有所帮助。

    3.3K20

    Python协议 、鸭子类型 、 抽象基 、混入

    本篇文章探讨一下python几个概念:协议 、鸭子类型 、 抽象基 、混入。 一、协议 在python,协议是一个或一组方法。...二、鸭子类型(duck typing) 多态一种形式,在这种形式,对象类型无关紧要,只要实现了特定协议即可。...通过输出结果就能看出,Eg1对象可以计算长度,也可以循环处理,这和正常序列没什么不同。因此我们可以把Eg1称为一个鸭子类型,即 只关注它是否实现了相应协议,不关注它类型。...从概念上讲,混入不定义新类型,只是打包方法,便于重用。混入应该提供某方面的特定行为,只实现少量关系非常紧密方法并且混入绝对不能实例化。...在 Python 没有声明为混入正规方式,所以强烈推荐在名称中加入 ...Mixin 后缀。

    1.9K20

    特殊设计以及C++类型转换

    请设计一个,不能被拷贝 拷贝只会放生在两个场景:拷贝构造函数以及赋值运算符重载,因此想要让一个禁止拷贝,只需让该类不能调用拷贝构造函数以及赋值运算符重载即可。...用一个成员函数来在堆上创建对象(因为内能访问私有成员构造函数,外不可以),那为什么要用static修饰GetObj?...请设计一个,不能被继承 C++98: C++98构造函数私有化,派生调不到基构造函数。...请设计一个,只能创建一个对象(单例模式) 一个只能创建一个对象,即单例模式,该模式可以保证系统该类只有一个实例,并提供一个访问它全局访问点,该实例被所有程序模块共享。...比如在某个服务器程序,该服务器配置信息存放在一个文件,这些配置数据由一个单例对象统一读取,然后服务进程其他对象再通过这个单例对象获取这些配置信息,这种方式简化了在复杂环境下配置管理。

    7210

    面向对象之this指针与枚举类型

    this指针与枚举类型 1.this指针 相信在坐很多人,都在学Python,对于Python来说有self,类比到C++中就是this指针,那么下面一起来深入分析this指针在使用!...(2)this作用域是在内部,当在非静态成员函数访问非静态成员时候,编译器会自动将对象本身地址作为一个隐含参数传递给函数。...也就是说,即使你没有写上this指针,编译器在编译时候也是加上this,它作为非静态成员函数隐含形参,对各成员访问均通过this进行。...2.枚举类型 有时我们希望某些常量只在中有效。由于#define 定义宏常量是全局,不能达到目的,于是想到实用const 修饰数据成员来实现。...别指望 const 数据成员了,应该用枚举常量来实现。

    1.2K10

    《你不知道JavaScript》:js为什么没有

    --是一种代码组织结构形式,是一种在软件对真实世界问题领域建模方法。有三个核心概念:封装、继承和多态。...Vehicle定义包括引擎、载人能力等,这些应该算是Vehicle方法。Vehicle定义是几乎所有类型交通工具都包含东西。...在软件,对不同交通工具重复定义载人能力等方法是没有意义,只要在Vehicle定义一次,然后在Car时,只要声明它继承(或扩展)了Vehicle基础定义就行。...Car定义就是对通用Vehicle定义特殊化。 这里要注意,尽管Vehicle和Car都会定义相同方法,但实例数据可能是不同。比如每辆车识别码等。...在javascript也有类似的语法,但是和传统完全不同。 js只有对象,没有这个概念。 意味着复制,传统被实例化时,它行为会被复制到实例被继承时,行为也会被复制到子类

    1.7K30

    CA1835:在基于,首选 ReadAsyncWriteAsync 方法基于内存重载

    WriteAsync 基于字节数组方法重载等待调用,并建议改为使用基于内存方法重载,因为它们效率更高。...规则说明 基于内存方法重载具有比基于字节数组重载更有效内存使用。 此规则适用于从 Stream 继承任何 ReadAsync 和 WriteAsync 调用。...) ReadAsync(Byte[], Int32, Int32) CancellationToken 设置为 default(在 C# )或 Nothing(在 Visual Basic ReadAsync...备注 规则 CA1835 适用于所有提供基于内存重载 .NET 版本: .NET Standard 2.1 及更高版本。 .NET Core 2.1 及更高版本。...s.WriteAsync(buffer, 0, buffer.Length).ContinueWith(c => { /* ... */ }); } } } 何时禁止显示警告 如果不考虑在基于读取或写入缓冲区时提高性能

    1.2K00

    【C++】异常处理 ⑥ ( 异常生命周期 | 抛出自定义对象异常 | 自定义对象异常生命周期 | 抛出 自定义引用类型 异常 | 抛出 自定义指针类型 异常 )

    一、C++ 异常处理 - 抛出自定义对象异常 1、抛出 异常对象 如果 抛出 指针类型 , 指向是 实际对象 , 那么就要涉及到 对象 内存空间 分配 与 释放 ; 涉及到 内存空间 申请...和 释放 , 就需要考 讨论 异常 生命周期 , 什么时候申请内存 , 什么时候释放内存 ; 2、代码示例 - 抛出 异常对象 下面的代码 , 声明了 3 个自定义 Exception1 , Exception2...如果 try-catch 代码块 , 只拦截 异常类型 , 没有声明拦截 异常变量 , 就不会调用 抛出异常 拷贝构造函数 ; catch (Exception3) { cout << "...三、C++ 异常处理 - 抛出 自定义引用类型 异常 1、不能同时拦截 对象类型 和 引用类型 在 try-catch 代码块 , 不能同时拦截 对象类型 和 引用类型 , 系统会将这两种类型 看做...四、C++ 异常处理 - 抛出 自定义指针类型 异常 1、可以同时拦截 指针类型 和 引用类型 在 try-catch 代码块 , 可以同时拦截 指针类型 和 引用类型 异常 , 系统会将这两种类型

    21910

    SpringMultipartFile转换为自定义StreamFile

    标题:SpringMultipartFile转换为自定义StreamFile 在Spring框架处理文件上传时,我们通常会使用MultipartFile接口。...然而,有时候我们可能需要将MultipartFile转换为自定义流文件,以便更好地满足我们业务需求。本文将介绍如何将MultipartFile转换为自定义StreamFile。...一、自定义StreamFile 首先,我们需要定义一个自定义StreamFile。这个可以封装与流相关属性和方法,以便我们更方便地处理文件流。...return new StreamFile(inputStream, fileName, fileSize); } } 三、使用示例 现在,我们可以使用FileUtils...四、总结 通过将MultipartFile转换为自定义StreamFile,我们可以更方便地封装和处理与文件流相关属性和方法。这有助于我们在应用程序更好地管理文件上传和处理逻辑。

    19610
    领券