在传递给JSP Tag Handler之前评估变量

Rob*_*ska 3 java jsp jsp-tags

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

<% int index = 8; %>

<foo:myTag myAttribute="something_<%= index %>"/>
Run Code Online (Sandbox Code Playgroud)

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

public int doStartTag() {
    ...
    out.println("Foo: " + this.myAttribute);
}
Run Code Online (Sandbox Code Playgroud)

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

Foo: something_<%= index %>
Run Code Online (Sandbox Code Playgroud)

而不是我想要的:

Foo: something_8
Run Code Online (Sandbox Code Playgroud)

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

<attribute>
    <name>myAttribute</name>
    <required>true</required>
</attribute>
Run Code Online (Sandbox Code Playgroud)

我试图用rtexprvalue两个true和配置属性false,但都没有工作.有没有办法可以配置属性,以便在发送给Handler之前对其进行评估?或者我是否完全错了?

我对JSP标签比较新,所以我愿意接受解决这个问题的替代方案.另外,我意识到在JSP中使用scriptlet是不受欢迎的,但是我在这里使用了一些遗留代码,所以我现在有点困惑.

编辑:

我也尝试过:

<foo:myTag myAttribute="something_${index}"/>
Run Code Online (Sandbox Code Playgroud)

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

Luk*_*ard 6

我不相信您可以<%= ... %>在自定义标记中的属性中使用,除非您<%= ... %>是属性值的全部内容.以下是否适合您?

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

<foo:myTag myAttribute="<%= attribValue %>"/>
Run Code Online (Sandbox Code Playgroud)

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