Java 通过“预挂起”别名对象方法;获得;在JSP页面中使用

Java 通过“预挂起”别名对象方法;获得;在JSP页面中使用,java,jsp,jstl,Java,Jsp,Jstl,我有一个自定义bean的ArrayList。我想通过调用ArrayList的toArray方法,然后在它包含的对象上重写toString,将jstljoin函数与ArrayList一起使用 有人说,没有什么能真正阻止我扩展类以包含我想向JSP公开的方法/属性的“get” 因此,对于这个例子: class MyArrayList extends ArrayList { public Object[] getToArray() { return this.toArray();

我有一个自定义bean的
ArrayList
。我想通过调用
ArrayList
toArray
方法,然后在它包含的对象上重写
toString
,将jstl
join
函数与
ArrayList
一起使用

有人说,没有什么能真正阻止我扩展类以包含我想向JSP公开的方法/属性的“get”

因此,对于这个例子:

class MyArrayList extends ArrayList
{
  public Object[] getToArray()
  {
     return this.toArray();
  }
}
好主意

我一直在创建类似这样的类,并考虑到可重用性,这让我想知道:是否存在一个库,它通过将有用的方法别名为“get”版本来扩展许多核心Java类,以便在JSP中使用它们


当然,这可能是我没有完全掌握JSP的一些基本概念的另一个例子,但我认为在JSP页面中只能使用具有“get”样式方法名称的bean类型类纯粹是一种不便。如果是这样,请告诉我为什么这样的图书馆是个坏主意。基本上,如果我描述的库不存在,为什么不存在呢?

至于您的具体功能需求,您可以创建一个定制的EL
join()
函数,它接受一个
列表
集合

例如

package.com.example;
导入java.util.Collection;
公共最终类函数{
私有函数(){}
公共静态字符串联接(集合集合、字符串分隔符){
StringBuilder=新的StringBuilder();
for(E元素:集合){
如果(builder.length()>0){
builder.append(分隔符);
}
builder.append(元素);
}
返回builder.toString();
}
}
您可以在
/WEB-INF/functions.tld
文件中按如下方式注册:


1
自定义函数
http://example.com/functions
参加
com.example.Functions
java.lang.String连接(java.util.Collection,java.lang.String)
最终可以用作


${f:join(bean.list,,)}
或者,如果您碰巧已经在类路径中,只需委托给它即可


参加
org.apache.commons.lang.StringUtils
java.lang.String连接(java.util.Collection,java.lang.String)

至于您最初的问题,我不希望将自定义公共方法添加到现有接口的自定义实现中,而依赖于该自定义实现。

EL 2.2—它允许您调用任意方法(在Tomcat 7以后提供)—应该可以满足您的需要。e、 g.${someListObject.toArray()}它应该返回一个数组

允许调用任意方法(在Tomcat7以后的版本中可用)的EL2.2是否满足了您的需要?e、 g.${someListObject.toArray()}它应该返回一个数组。@MarkThomas听起来确实是这样。我(现在)被6卡住了。谢谢,这是一个很好的答案。这是一个很好的解决方案,也是在这种情况下我的“别名”类的一个很好的替代方案。谢谢