EL言語遍歴集合にPropertyNotFoundExceptionが現れる2つのケース


集合をEL言語で巡回する際に現れるPropertyNotFoundException異常の2つについて
1、javax.el.PropertyNotFoundException: Property 'uName' not found on type cn.pa.bean.Users
2、javax.el.PropertyNotFoundException: Property 'uname' not found on type java.lang.String
 
何が原因ですか.次のテストを行います.
コードの明確化のために、コードをエンティティクラス、表示ページ、制御クラスの3つの部分に分けました.
 
エンティティークラス:Users.java---------------------
 
package cn.pa.bean;
/**
 *    
 */
public class Users {
	
	private String uName = null; //    

	public String getUName() {
		return uName;
	}

	public void setUName(String name) {
		uName = name;
	}
	
	
}

 
制御類:DispServicelet.java------------------------------
 
 
package cn.pa.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import cn.pa.bean.Users;
/**
 *    
 */
public class DispServlet extends HttpServlet {

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//         Users   
		List list = new ArrayList(); 
		
		//    5   Users   
		//      list   
		for (int i = 0; i < 5; i++) {
			Users user = new Users();
			user.setUName("name" + (i+1));
			list.add(user);
		}
		
		//     list   scope     request
		request.setAttribute("list", list);
		//      index.jsp   
		request.getRequestDispatcher("index.jsp").forward(request, response);
	}

}

 
 
表示ページ:show.jsp、index.jsp
show.jsp--------------
 
<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>

<html>
  
  <body>
  	<center>
    <form action="disp.do" method="post">
    	<input type="submit" value="    ">
    </form>
    </center>
  </body>
</html>

 
 
index.jsp---------------
<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
  
  <body>
    <!--      -->
    <c:forEach items="${list}" var="user">
    	${user.uName }
    </c:forEach>
  </body>
</html>

 
 
デフォルトページ、servletのxml構成:web.xml---------------
 
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <servlet>
    <servlet-name>DispServlet</servlet-name>
    <servlet-class>cn.pa.servlet.DispServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>DispServlet</servlet-name>
    <url-pattern>/disp.do</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>show.jsp</welcome-file>
  </welcome-file-list>
</web-app>

 
 
 
http://localhost:8686/Demo/を叩いて運転
ショーを表示します.jspページの内容-->「データの表示」ボタンを押す
アドレスバー表示:http://localhost:8686/Demo/disp.do
異常を報告:javax.el.PropertyNotFoundException: Property 'uName' not found on type cn.pa.bean.Users
 
${user.uName}のオブジェクトuserのuNameプロパティが見つかりません
Usersクラスのプロパティprivate String uName=nullを参照してください.
存在するのになぜ見つからないのでしょうか?
EL言語は属性からアクセスするものではなく,属性からアクセスするものではなく,メソッドからアクセスするものであることがわかる.
 
public String getUName() {
     return uName;
}

<c:forEach items="${list}" var="user">
     ${user.uName }
</c:forEach>

 
 
 
 
ELでこのような異常が発生した場合:
 
一、オブジェクトアクセスの属性はUsersクラスのgetUName()メソッドに対応し、getの後ろに同時に大文字を並べてはいけない.getUname()もMyEclipseのsetters、gettersで生成されたコードが必ずしもELで使用できるとは限らない
コードを変更します:1、ELラベル
 
<c:forEach items="${list}" var="user">
     ${user.uName }
</c:forEach>

 
変更後:
<c:forEach items="${list}" var="user">
     ${user.uname } <!-- user.uname    user.uname -->
</c:forEach>

 
 
2、Users類の方法
public String getUName() {
     return uName;
}

 
変更後:
public String getUname() { //      N    n
     return uName;
}

 
 
 
ページにデータが表示されます.
 name1 name2 name3 name4 name5
 
二、受信したオブジェクトが存在しない場合、つまり遍歴された集合itemsが空である場合、PropertyNotFoundException異常も発生する
つかむ
<c:forEach items="${list}" var="user">
     ${user.uname } 
</c:forEach>

 
 
誤記:
<c:forEach items="list" var="user"> <!-- items="${list}"    items="list"     user       -->
     ${user.uname } 
</c:forEach>

 
 
 
 
発生した異常:javax.el.PropertyNotFoundException: Property 'uname' not found on type  java.lang.String
javaでlang.Stringでunameのプロパティが見つかりません
まとめ:
1.EL言語を使用して、エンティティークラスがメソッドコードを生成する場合、属性名:uNameをuserNameに変更すると、生成されたメソッドコードはgetUserName()になります.
 
2、属性uNameを使用しない場合は、生成されたメソッド名getuname()をgetUname()に変更します.そうしないとサーバが認識できません
 
3、受信セットはitems="${...}"
4、ツール生成のメソッドコードに問題があるのではなく、自分で定義した属性が悪い、詳細な問題
プロジェクト圧縮ファイル: