jsp servlet javabean 实现MVC 奇怪问题.苦恼了许久:有知道问题原因的大虾帮帮忙!

时间:2021-06-15 17:43:21
主要原因:Jsp页面读不出从servlet中传过去的JavaBean的值
异常:
org.apache.jasper.JasperException: Cannot find any information on property 'mId' in a bean of type 'beans.Manager'

JavaBean: Manager(mId,mName,mPassword)



servlet代码:
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

Connection conn = null;
Statement st = null;
ResultSet rs = null;

String url = "jdbc:mysql://localhost:3306/db_xbsk";
String username = "root";
String password = "";
String sql = "select * from manager";


try{
Class.forName("com.mysql.jdbc.Driver").newInstance();
conn = DriverManager.getConnection(url,username,password);
st = conn.createStatement();

rs = st.executeQuery(sql);



Manager m = new Manager();

while(rs.next()){
m.setMId(rs.getInt("m_id"));
System.out.println("============到这了===========!");
m.setMName(rs.getString("m_name"));
m.setMPassword(rs.getString("m_password"));

System.out.println("============ID!"+m.getMId());
System.out.println("============Name!"+m.getMName());
System.out.println("============Password!"+ m.getMPassword());

HttpSession session = request.getSession();
session.setAttribute("mm", m);

RequestDispatcher requestDispatcher = request.getRequestDispatcher("/display.jsp");
requestDispatcher.forward(request, response);
}
}catch (Exception e){
System.out.println(e.getMessage());
}
finally{
System.out.println("============资源释放!");
if(conn != null){try {conn.close();} catch (SQLException e) {e.printStackTrace();}}
if(st != null){try {st.close();} catch (SQLException e) {e.printStackTrace();}}
if(rs != null){try {rs.close();} catch (SQLException e) {e.printStackTrace();}}
}
}


前台Jsp代码:
<body>
    <jsp:useBean id="mm" type="beans.Manager" scope="session" />
     <jsp:getProperty  name="mm" property="mId"/>
     <jsp:getProperty  name="mm" property="mName"/>
     <jsp:getProperty  name="mm" property="mPassword"/>
    
  </body>

 

15 个解决方案

#1


while(rs.next()){ 
确认这句执行啦?

#2


确定。控制台打印了:
============到这了===========!
============ID!2
============Name!旺旺小小酥
============Password!123321

#3


跳转错了,跳转页面要放到循环外面 ,只能跳转一次
应改为
  while(rs.next()){ 
    ....
    ....
    HttpSession session = request.getSession(); 
    session.setAttribute("mm", m); 
  }
request.getRequestDispatcher("/display.jsp").requestDispatcher.forward(request, response);

#4


把那个设置属性的值也放在外面
   while(rs.next()){ 
      .... 
      .... 
   } 

HttpSession session = request.getSession(); 
session.setAttribute("mm", m); 
request.getRequestDispatcher("/display.jsp").requestDispatcher.forward(request, response);

#5


改了.将跳转的语句放出来..运行..还是一样.jsp页面无法读JavaBean的值.

#6


 Cannot find any information on property 'mId' in a bean of type 'beans.Manager' 
?感觉是你Manager中的'mId' 定义有问题

#7


Manager 里面定义的int类型。
这是servlet中的赋值语句。能赋值。
m.setMId(rs.getInt("m_id")); 

#8


这样你在jsp页面上直接写
<%
Manager mm = (Manager )session.getAttribute("mm");
System.out.println(mm.getMId());
%>
看看能获得结构不,如果能,说明你的 <jsp:useBean 用法有问题,如果不能,说明你的session根本没存在这个数据

#9


还有检查下你的while(rs.next()){ 
这个东西循环了几次,如果是多次,就要把
HttpSession session = request.getSession(); 
session.setAttribute("mm", m); 

RequestDispatcher requestDispatcher = request.getRequestDispatcher("/display.jsp"); 
requestDispatcher.forward(request, response); 
移到while(rs.next()){ }外面

#10


Bean中的方法名改成这样:
setmId
getmId

#11


引用 9 楼 warison2008 的回复:
还有检查下你的while(rs.next()){
这个东西循环了几次,如果是多次,就要把
HttpSession session = request.getSession();
session.setAttribute("mm", m);

RequestDispatcher requestDispatcher = request.getRequestDispatcher("/display.jsp");
requestDispatcher.forward(request, response);
移到while(rs.next()){ }外面



这个应该是正解

#12


终于写出来了。
看来是<jsp:useBean 的问题。
这个问题是解决了。
新问题又来了。呵呵
谢谢美女程序员!

#13


<jsp:getProperty  name="mm" property="mId"/>    
试试这样<jsp:getProperty  name="mm" property=" ${mm.mId}"/
<jsp:getProperty  name="mm" property="mName"/> 
试试这样<jsp:getProperty  name="mm" property=" ${mm.mName}"/
<jsp:getProperty  name="mm" property="mPassword"/>
试试这样<jsp:getProperty  name="mm" property=" ${mm.mPassword}"/>

#14


当前结贴
新问题,再开贴

#15


引用 10 楼 bayougeng 的回复:
Bean中的方法名改成这样:
setmId
getmId


这样可以。这样写出来了。谢谢.
谢谢大家

#1


while(rs.next()){ 
确认这句执行啦?

#2


确定。控制台打印了:
============到这了===========!
============ID!2
============Name!旺旺小小酥
============Password!123321

#3


跳转错了,跳转页面要放到循环外面 ,只能跳转一次
应改为
  while(rs.next()){ 
    ....
    ....
    HttpSession session = request.getSession(); 
    session.setAttribute("mm", m); 
  }
request.getRequestDispatcher("/display.jsp").requestDispatcher.forward(request, response);

#4


把那个设置属性的值也放在外面
   while(rs.next()){ 
      .... 
      .... 
   } 

HttpSession session = request.getSession(); 
session.setAttribute("mm", m); 
request.getRequestDispatcher("/display.jsp").requestDispatcher.forward(request, response);

#5


改了.将跳转的语句放出来..运行..还是一样.jsp页面无法读JavaBean的值.

#6


 Cannot find any information on property 'mId' in a bean of type 'beans.Manager' 
?感觉是你Manager中的'mId' 定义有问题

#7


Manager 里面定义的int类型。
这是servlet中的赋值语句。能赋值。
m.setMId(rs.getInt("m_id")); 

#8


这样你在jsp页面上直接写
<%
Manager mm = (Manager )session.getAttribute("mm");
System.out.println(mm.getMId());
%>
看看能获得结构不,如果能,说明你的 <jsp:useBean 用法有问题,如果不能,说明你的session根本没存在这个数据

#9


还有检查下你的while(rs.next()){ 
这个东西循环了几次,如果是多次,就要把
HttpSession session = request.getSession(); 
session.setAttribute("mm", m); 

RequestDispatcher requestDispatcher = request.getRequestDispatcher("/display.jsp"); 
requestDispatcher.forward(request, response); 
移到while(rs.next()){ }外面

#10


Bean中的方法名改成这样:
setmId
getmId

#11


引用 9 楼 warison2008 的回复:
还有检查下你的while(rs.next()){
这个东西循环了几次,如果是多次,就要把
HttpSession session = request.getSession();
session.setAttribute("mm", m);

RequestDispatcher requestDispatcher = request.getRequestDispatcher("/display.jsp");
requestDispatcher.forward(request, response);
移到while(rs.next()){ }外面



这个应该是正解

#12


终于写出来了。
看来是<jsp:useBean 的问题。
这个问题是解决了。
新问题又来了。呵呵
谢谢美女程序员!

#13


<jsp:getProperty  name="mm" property="mId"/>    
试试这样<jsp:getProperty  name="mm" property=" ${mm.mId}"/
<jsp:getProperty  name="mm" property="mName"/> 
试试这样<jsp:getProperty  name="mm" property=" ${mm.mName}"/
<jsp:getProperty  name="mm" property="mPassword"/>
试试这样<jsp:getProperty  name="mm" property=" ${mm.mPassword}"/>

#14


当前结贴
新问题,再开贴

#15


引用 10 楼 bayougeng 的回复:
Bean中的方法名改成这样:
setmId
getmId


这样可以。这样写出来了。谢谢.
谢谢大家