在标记库描述符中使用varargs
是否可以将TLD映射到以下函数:
public static T[] toArray(T... stuff) { return stuff; }
所以我可以这样做:
<c:forEach items="${my:toArray('a', 'b', 'c')}"...
我尝试了以下
java.lang.Object toArray( java.lang.Object... ) java.lang.Object[] toArray( java.lang.Object[] )
而其他人似乎没什么用。
不幸的是,这是不可能的。 EL解析器立即将函数中的逗号解释为单独的参数,而不检查是否有任何方法采用varargs。 你最好的选择是使用JSTL fn:split()
代替。
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> ... ${item}
然而,它本来是EL的一个很好的function ,虽然实现它会非常复杂。
好吧。 所以这是用于文字建设,并且将有限的项目
public static Object[] array(Object x0) { return new Object[] {x0}; } public static Object[] array(Object x0, Object x1) { return new Object[] {x0, x1}; } .... public static Object[] array(Object x0, Object x1, Object x2, ... Object x99) { return new Object[] {x0, x1, x2, ... x99}; }
我这样做并不觉得有罪。 自动生成100个并且您已设置。 哈!
这有点痛苦,但你可以这样做:
class MyAddTag extends SimpleTagSupport { private String var; private Object value; public void doTag() { ((List) getJspContext().getAttribute(var).setValue(value); } } ...
我做的一件事就是创建一个实用程序函数类,并在服务器启动时将其设置在应用程序上下文中,而不是尝试将其定义为EL函数。 然后,您可以在EL中访问该方法。
所以当我的servlet启动时:
context.setAttribute("utils", new MyJSPUtilsClass());
在我的JSP上:
${utils.toArray(1, 2, 3, 4)}