【问题标题】:Passing value to Custom Tag giving NumberFormatException将值传递给自定义标签给出 NumberFormatException
【发布时间】:2012-02-14 12:53:05
【问题描述】:

我已经定义了一个自定义标签来接受一个参数,一个数字,然后它会使用它来查找一些信息并返回。不过,我不断收到 NumberFormatException 。我正在使用 EL 将数字传递给我的 jsp 中的标签。

<my:myTag id="${action.id}"/>

在 Action 的 bean 类中:

private int id;
private void setId(int id){
this.id = id;
}
private int getId(){
return id;
}

在我的自定义标签处理程序中:

private int id;
//getters and setters for id
public int doStartTag() throws JSPException {
//Does some stuff with id
}

在我的顶级域名中(省略了一些内容):

<attribute>
   <name>id</name>
   <required>true</required>
   <rtexprvalue>true</rtexprvalue>
</attribute>

如果我只是传入一个数字(即 id="6"),标签会执行我想要的操作,但当我尝试使用 EL 表达式值时总是会抛出异常。评估表达式时是否在某处发生了一些 int-string 转换?它是 bean 中的一个 int 字段,我认为它会这样通过?我尝试将我的标记处理程序的属性更改为 String 和 Integer,但都没有解决这个问题。我已将 rtexprvalue 设置为 true,因此它应该可以很好地评估它。任何帮助表示赞赏。

【问题讨论】:

  • 你究竟在哪里得到空指针异常?
  • 什么JSP引擎,什么版本?旧版本的 JSP 规范没有在 JSP 编译器阶段包含 EL 解析/评估 - 表达式必须由标记手动评估。
  • @Tim 谢谢。这为我指明了正确的方向,确实是必须在标签处理程序中手动评估表达式。如果您想将此作为答案,我会接受。

标签: java jsp jsp-tags


【解决方案1】:

好的,这是我上面评论的较长版本...

在 JSP 1.x 中,JSP 引擎对表达式语言一无所知。 EL 被定义为 JSTL 的一部分,但它内置于标签本身,引擎不参与评估。

在 JSP 2.0 中,EL 被移入 JSP 规范,并且引擎支持它。在 JSP 2.1 中,EL 与 JSF EL 合并。

所以,如果您使用的是 JSP 1.x,那么您必须自己进行 EL。

但是,为了让事情变得更复杂,在 JSP 2.0 中,客户标签处理程序的 API 被简化了。在 JSP 1.x 中,标签实现了Tag,但在 JSP 2.0 中标签实现了SimpleTag

JSP 2.x 引擎将支持 JSP 1.x 样式标记(实现 Tag 的类),但会以 JSP 1.x 处理它们的相同方式处理它们 - 引擎不评估 EL,并且标签需要明确评估它。

至于rtexprvalue,这实际上控制是否支持scriptlet 表达式,而不是是否支持EL 表达式(该属性早于EL)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-04
    • 2023-03-24
    • 2013-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-07
    相关资源
    最近更新 更多