将值传递给Custom Tag,给出NumberFormatException

时间:2012-02-14 12:53:05

标签: java jsp jsp-tags

我已经定义了一个自定义标记来获取一个参数,一个数字,然后用它来查找一些信息并返回。我不断收到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
}

在我的tld中(省略了一些东西):

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

如果我只是传入一个数字(即id =“6”),那么标签会按照我想要的方式执行,但是当我尝试使用EL表达式值时,它总是抛出异常。在评估表达式时,是否会发生某些字符串转换?它是bean中的一个int字段,我认为它只是通过这样的传递?我已经尝试将我的标记处理程序的属性更改为String和Integer,但都没有解决这个问题。我已将rtexprvalue设置为true,因此应该对其进行评估。任何帮助赞赏。

1 个答案:

答案 0 :(得分:2)

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

在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之前的那个)。