2012-02-14 74 views
1

我已經定義了一個自定義標籤來接受一個參數,一個數字,然後用它來查找一些信息並返回。儘管如此我仍然收到NumberFormatException。我通過使用EL將數字傳遞給我的jsp中的標籤。將值傳遞給給給NumberFormatException的自定義標籤

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

在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表達式值時總是拋出異常。是否有一些int-string轉換髮生在表達式被評估的地方?它是bean中的一個int字段,我認爲它會通過這樣的通過?我試圖將我的標記處理程序的屬性更改爲字符串和整數,但都沒有解決這個問題。我已將rtexprvalue設置爲true,因此應該對其進行評估。任何幫助讚賞。

+0

你到底在哪裏得到空指針異常? – 2012-02-14 12:56:15

+2

什麼JSP引擎,什麼版本?較早版本的JSP規範在JSP編譯器階段沒有包含EL解析/評估 - 表達式必須由標籤手動評估。 – Tim 2012-02-14 12:59:02

+0

@Tim謝謝。這使我指出了正確的方向,事實上它必須在標籤處理程序中手動評估表達式。如果你想把這個作爲答案,我會接受它。 – Paul 2012-02-14 14:21:17

回答

2

OK,這是我的上述評論的更長的版本...

在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)。