關於EL在JSP內呼叫RequestScope內建物件報錯的問題

ZwiebelnX發表於2018-05-03

先貼出原始碼

Search.java

public class Search {
    private String dest;
    private String date;

    public void setDest(String e){
        dest = e;
    }

    public void setDate(String d){
        date = d;
    }


    public Result getSearchResult(){
        Result r = SearchDao.SearchInfo(dest, date);
        return r;
    }
}

Search.jsp

<%
	Search s = new Search();
	request.setCharacterEncoding("GBK");
	String dest = request.getParameter("dest");
	String date = request.getParameter("date");
	s.setDate(date);
	s.setDest(dest);
	request.setAttribute("SearchInfo", s);
%>
<html>
<head>
	<title>SearchInfo</title>
</head>
<body>
<p>------------------------------------------</p>
<p>查詢資訊:</p>
<p>目的地:${requestScope.SearchInfo.dest}</p>
<p>出發日期:${requestScope.SearchInfo.date}</p>
<p>------------------------------------------</p>
<%
	Result result = s.getSearchResult();
	Map[] m = result.getRows();
	for(int i = 0; i<result.getRowCount();i++){
		out.println("<p>航班號:"+m[i].get("id")+"  "+"出發時間:"+m[i].get("tfdate")+"  "+"目的地:"+m[i].get("dest"));
	}
%>
<p>-----查詢結束-----</p>
</body>
</html>

今天在做作業的時候想要用EL呼叫RequestScope內建物件的時候 出現瞭如下錯誤

javax.el.PropertyNotFoundException: Property [dest] not readable on type [Bean.Search] 

在CSDN上查到發現是所呼叫物件沒有被設定成public

但是更改屬性成public之後仍然出現上述錯誤 


進一步查詢發現:點選開啟連結

You have 2 options:

  1. Use boolean instead of Boolean.

  2. Or, rename method isPrimary() to getPrimary()

於是在上述Search類中新增getDate()和getDest() 保留date和dest的private屬性

發現可行



按照目前測試出來的結果 EL在呼叫RequestScope內建類物件中的屬性時採用的方法是呼叫getXXX()函式來實現的 

所以想要實現用EL呼叫內建類物件的屬性時一定要有getXXX()類函式


相關文章