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---------------------
制御類:DispServicelet.java------------------------------
表示ページ:show.jsp、index.jsp
show.jsp--------------
index.jsp---------------
デフォルトページ、servletのxml構成:web.xml---------------
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言語は属性からアクセスするものではなく,属性からアクセスするものではなく,メソッドからアクセスするものであることがわかる.
ELでこのような異常が発生した場合:
一、オブジェクトアクセスの属性はUsersクラスのgetUName()メソッドに対応し、getの後ろに同時に大文字を並べてはいけない.getUname()もMyEclipseのsetters、gettersで生成されたコードが必ずしもELで使用できるとは限らない
コードを変更します:1、ELラベル
変更後:
2、Users類の方法
変更後:
ページにデータが表示されます.
name1 name2 name3 name4 name5
二、受信したオブジェクトが存在しない場合、つまり遍歴された集合itemsが空である場合、PropertyNotFoundException異常も発生する
つかむ
誤記:
発生した異常: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、ツール生成のメソッドコードに問題があるのではなく、自分で定義した属性が悪い、詳細な問題
プロジェクト圧縮ファイル:
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、ツール生成のメソッドコードに問題があるのではなく、自分で定義した属性が悪い、詳細な問題
プロジェクト圧縮ファイル: