遇到一個(gè)異常:
javax.servlet.jsp.el.ELException: Unable to find a value for “isActive” in object of class “com.mycompany.domain.User” using operator “.”
使用“.”運算符,在User類(lèi)的對象中,找不到isActive的值。
錯誤之處是,在JSP頁(yè)面中我使用了:
1 | ${user.isActive} |
檢查后發(fā)現沒(méi)有寫(xiě)屬性isActive的getter方法,那好,利用IntelliJ IDEA的自動(dòng)生成代碼功能,補上:
1 2 3 | public boolean isActive() { return isActive; } |
運行,還是不對,問(wèn)Erik,他說(shuō)JavaBean命名規范里面規定,對于primitive和自定義類(lèi)類(lèi)型的屬性property(小寫(xiě)),getter和setter方法就是getProperty和setProperty(第一個(gè)字母變大寫(xiě),前面再加get或set)。而對于類(lèi)型為boolean的屬性,getter方法還可以寫(xiě)為isProperty(getProperty仍然可用),而且,如果屬性的前兩個(gè)字母是is(兩個(gè)小寫(xiě)),則getter與property完全同名(比如上面屬性isActive的getter就是isActive())。
如果有個(gè)叫isIsActive的boolean類(lèi)型屬性,它的getter呢?答案還是isIsActive()。
所以,無(wú)論屬性名是isActive還是active,getter只能是isActive()或者getActive(),JSP里只能用${user.active}來(lái)訪(fǎng)問(wèn)(注意大小寫(xiě))。
最好的辦法是不要以“is”作為開(kāi)頭來(lái)命名boolean類(lèi)型的屬性,以免混淆。

