2009-10-10 135 views
1

我尝试创建一个jsp标记文件,它将调用帮助器类来打印输入对象。所以,我创建了一个文件/WEB-INF/tags/formatter.tag在循环内部的jsp标签文件中访问变量?

<%@ tag import="package.Formatter"%> 
<%@ attribute name="value" required="true" type="java.lang.Object" %>    
<%=Formatter.format(pageContext.getAttribute("value"))%> 

所以,我可以把它在JSP这样的:

<t:formatter value="${obj}" /> 

但是我发现,它不会在一个循环内工作,例如

<c:forEach items="${list}" var="i"> 
    <t:formatter value="${i.property}"/> 
</c:forEach> 

我怀疑我不应该从pageContext获取属性。但我不确定。任何人都知道这件事?

+0

“不工作”是什么意思?你得到一个错误或错误的结果? – moxn 2009-10-10 06:11:48

+0

websphere得到了一些ArrayIndexOutOfBoundException,引发com.ibm.ws.jsp.translator.visitor.validator.ValidateVisitor.getELExpressions – jackysee 2009-10-12 01:45:06

回答

0

尝试以下操作:

首先,将您的格式是一个标准的Java bean(即使格式方法非静态,无参数的构造函数等)。将标签更改为:

<%@ tag import="package.Formatter" %> 
<%@ attribute name="value" required="true" type="java.lang.Object" %> 
<jsp:useBean id="formatter" class="package.Formatter" />    
${formatter.format(value)} 
+0

仍然是同样的问题。 – jackysee 2009-10-12 07:04:32

+0

请尝试新的解决方案 – 2009-10-12 07:51:58

+0

在我的情况下,我需要传递两个参数。例如$ {formatter.format(值,2)}。这会导致JSP错误:无法解析EL功能 – jackysee 2009-10-15 09:15:09

0

加入以下内容。很可能你的问题是没有任何“C”标签正在处理中。

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>