3

在尝试使用自定义 JSP 标记库时,我在 JSP 中定义了一个变量,我希望在将其传递给标记库之前对其进行评估。但是,我似乎无法让它工作。这是我的 JSP 的简化版本:

<% int index = 8; %>

<foo:myTag myAttribute="something_<%= index %>"/>

我的doStartTag()方法TagHandler使用pageContext的输出流根据输入的属性进行写入:

public int doStartTag() {
    ...
    out.println("Foo: " + this.myAttribute);
}

但是,我在最终标记中看到的输出是:

Foo: something_<%= index %>

而不是我想要的:

Foo: something_8

我对该属性的标签库定义是:

<attribute>
    <name>myAttribute</name>
    <required>true</required>
</attribute>

我曾尝试使用 和 配置属性rtexprvaluetruefalse均未成功。有没有办法可以配置属性,以便在发送到处理程序之前对其进行评估?还是我完全错了?

我对 JSP 标签比较陌生,所以我对解决这个问题的替代方案持开放态度。另外,我意识到在 JSP 中使用 scriptlet 是不受欢迎的,但我在这里使用一些遗留代码,所以我现在有点坚持。

编辑:

我也试过:

<foo:myTag myAttribute="something_${index}"/>

这也不起作用 - 它只是输出something_${index}

4

3 回答 3

6

我不相信您可以<%= ... %>在自定义标签的属性内使用 a ,除非您<%= ... %>是属性值的全部内容。以下内容对您有用吗?

<% int index = 8; %>
<% String attribValue = "something_" + index; %>

<foo:myTag myAttribute="<%= attribValue %>"/>

编辑:我相信<% ... %>自定义标签属性内只能包含一个变量名。不是任何Java表达式。

于 2009-04-24T20:35:02.573 回答
2

为了使您的 JSP 代码保持干净整洁,请尽可能避免编写脚本。我认为这是首选的方法:

<foo:myTag >
  <jsp:attribute name="myAttribute">
    something_${index}
  </jsp:attribute>
</foo:myTag >

如果您的标签还包含正文,则必须将其从

<foo:myTag myAttribute="<%= attribValue %>">
  body
</foo:myTag >

<foo:myTag >
  <jsp:attribute name="myAttribute">
    something_${index}
  </jsp:attribute>
  <jsp:body>
    body
  </jsp:body>
</foo:myTag >
于 2010-07-06T11:13:12.937 回答
0

<foo:myTag myAttribute="something_${index}"/>

于 2009-04-24T20:23:45.893 回答