Cannot find a method to read property 'shopname' in a bean of type 'mybean.User'
JSP 標籤 <jsp:getProperty name="user" property="shopname"/> 或 EL ${user.shopname} 依賴 **JavaBean 規範**:屬性 shopname 必須有對應的 **getter 方法** getShopname() (或 getShopName() 依慣例)。
package mybean;
public class User {
private String shopname;
// 其他欄位...
// 必須有公開 getter
public String getShopname() {
return shopname;
}
// 建議也加 setter
public void setShopname(String shopname) {
this.shopname = shopname;
}
}
| 屬性名 (property) | Getter 方法名 | Setter 方法名 |
|---|---|---|
| shopname | getShopname() | setShopname(String) |
| shopName | getShopName() | setShopName(String) |
| userID | getUserID() | setUserID(String) |
| isActive (boolean) | isActive() / getActive() | setActive(boolean) |
public String shopname; **無 getter 仍會失敗**,JSP/EL 只找方法不直接存取欄位。getshopname() (小寫 s) 不符合規範。boolean 時 getter 慣例為 isXxx(),但 getXxx() 也被接受。<%-- 測試 Bean 是否符合規範 --%>
<jsp:useBean id="user" class="mybean.User" scope="session"/>
<jsp:setProperty name="user" property="*"/>
<%-- 若無誤誤,表示 getter/setter 正確 --%>
Shopname: <jsp:getProperty name="user" property="shopname"/>
Cannot find method to read property 'xxx' 直接原因是 **Bean 缺少對應的公開 getter 方法**。補上 getXxx() (屬性首字母大寫) 即可解決。