%@ page language="java" import="java.util.*"  isELIgnored="false" 
 import="com.user.FileInfo"import="com.user.Book" pageEncoding="GB2312"%>
<%@page import="com.user.BookManagerDB"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
 <style type="text/css"> 
<!-- 
body  {
background: #666666;
margin: 0; /* 最好将 body 元素的边距和填充设置为 0 以覆盖不同的浏览器默认值 */
text-align: center; /* 在 IE 5* 浏览器中,这会将容器居中。文本随后将在 #container 选择器中设置为默认左对齐 */
color: #0F0;
font-family: "宋体", "新宋体";
font-size: 100%;
font-weight: bolder;
}
#mainContent {
/* 右边距可以用全方 (em) 或像素来指定,它会在页面的右下方产生空白。 */
height: 400px;
width: 550px;
float: left; background-image: url(images/addbookbg.gif);

} .divclass {
position: absolute;
height: 212px;
width: 350px;
left:75px;
top:85px;
padding-top:0px;
background-image:url(images/login_03.gif);
}
.inputclass {
width:115px; 
height:14px; 
text-align:left;
background-color:#292929; 
border:solid 1px #7dbad7; 
font-size:12px; color:#6cd0ff;
}
--> 
</style><!--[if IE]>
<style type="text/css"> 
/* 请将所有版本的 IE 的 css 修复放在这个条件注释中 */
.twoColElsLt #sidebar1 { padding-top: 30px; }
.twoColElsLt #mainContent { zoom: 1; padding-top: 15px; }
/* 上面的专用 zoom 属性为 IE 提供避免错误所需的 hasLayout */
</style>
<![endif]--></head><body>
<div id="mainContent">
<table width="490" border="1" cellspacing="0" cellpadding="0">
  <tr>
    <td width="90">书的ID</td>
    <td width="90">书名</td>
    <td width="90">作者</td>
    <td width="90">价格</td>
    <td width="90">ISBN</td>
    <td width="90">书的类型</td>
    <td width="90">出版社</td>  </tr>
</table>
   <% BookManagerDB DM = new BookManagerDB();
           DM.readFileDB();
           int i=1001;
           Iterator it =FileInfo.bookList.iterator();
           while(it.hasNext()){i++; Book obj = (Book)it.next();
           %>
 <table width="490" border="1" cellspacing="0" cellpadding="0">
  <tr>
    <td width="90"><%= obj.getBookid()%></td>
    <td width="90"><%= obj.getBookname()%></td>
    <td width="90"><%= obj.getDuthor()%></td>
    <td width="90"><%= obj.getPrice()%></td>
    <td width="90"><%= obj.getIsbn()%></td>
    <td width="90"><%= obj.getBooktype()%></td>
    <td width="90"><%=obj.getBookname() %></td>  </tr>
</table>    <%} %>
    共有<%=FileInfo.bookList.size()%>记录</div></body>
</html>
中的这段:  <tr>
    <td width="90"><%= obj.getBookid()%></td>
    <td width="90"><%= obj.getBookname()%></td>
    <td width="90"><%= obj.getDuthor()%></td>
    <td width="90"><%= obj.getPrice()%></td>
    <td width="90"><%= obj.getIsbn()%></td>
    <td width="90"><%= obj.getBooktype()%></td>
    <td width="90"><%=obj.getBookname() %></td>  </tr>
要换成EL表达式要怎么实现?
--------------------------------
如果能把这段代码的<% %>去掉那就更好了!

解决方案 »

  1.   

    详细的你可以在网上搜一下关于EL表达式的用法详解。EL 表达式包含变量和操作符两个内容。任何存在于 JSP 作用范围的 JavaBean 都可以被转化成 EL 表达式来使用。它包含的默认变量是pageScope 、 requestScope 、 sessionScope 、 applicationScope。你的这个大概是写成类似${obj.bookname}的,你可以试试看。。
      

  2.   

    相关的资料很多,我一搜就找到了不少。。http://www.blogjava.net/supercrsky/articles/179363.html
      

  3.   

    你只需要在servllet中用List<Book> list=new ArrayList<Book>();然后将book中的值取出来存在list中,最后用session.setAttribute("obj", list);
    要使用el表达式,必须引入jstl.jar,然后在jsp页面里加上<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
    <c:forEach var="obj" items="${obj}">
    <td width="90"><c:out value="${obj.bookId}"></c:out></td>
    <td width="90"><c:out value="${obj.bookName}"></c:out></td>
    <td width="90"><c:out value="${obj.duthor}"></c:out></td>
    <td width="90"><c:out value="${obj.price}"></c:out></td>
    <td width="90"><c:out value="${obj.isbn}"></c:out></td>
    <td width="90"><c:out value="${obj.bookType}"></c:out></td>这样就OK了,你就可以在改动很少的jsp页面,从而实现同样的功能了
      

  4.   

    <c:forEach var="obj" items="${obj}">
    <td width="90"><c:out value="${obj.bookId}"></c:out></td>
    <td width="90"><c:out value="${obj.bookName}"></c:out></td>
    <td width="90"><c:out value="${obj.duthor}"></c:out></td>
    <td width="90"><c:out value="${obj.price}"></c:out></td>
    <td width="90"><c:out value="${obj.isbn}"></c:out></td>
    <td width="90"><c:out value="${obj.bookType}"></c:out></td>
      

  5.   

    <% BookManagerDB DM = new BookManagerDB();
               DM.readFileDB();
               int i=1001;
               Iterator it =FileInfo.bookList.iterator();
               while(it.hasNext()){i++; Book obj = (Book)it.next();
               session.setAttribute("obj",obj);
               %>
    <table width="490" border="1" cellspacing="0" cellpadding="0">
      <tr>
    <td width="90"><c:out value="${sessionScope.obj.getBookid()}"></c:out></td>
    <td width="90"><c:out value="${sessionScope.obj.getBookname()}"></c:out></td>
    <td width="90"><c:out value="${sessionScope.obj.getDuthor()}"></c:out></td>
    <td width="90"><c:out value="${sessionScope.obj.getPrice()}"></c:out></td>
    <td width="90"><c:out value="${sessionScope.obj.getIsbn()}"></c:out></td>
    <td width="90"><c:out value="${sessionScope.obj.getBooktype()}"></c:out></td>
    <td width="90"><c:out value="${sessionScope.obj.getPublished}"></c:out></td>  </tr>
    </table>    <%} %>
        共有<%=FileInfo.bookList.size()%>记录
      

  6.   

    上面那样写居然报错!
    错误如下。。是什么原因?
    HTTP Status 500 - --------------------------------------------------------------------------------type Exception reportmessage description The server encountered an internal error () that prevented it from fulfilling this request.exception org.apache.jasper.JasperException: org.apache.jasper.JasperException: Unable to load class for JSP
    org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:156)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:329)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    yao.com.vo.EncodingFilter.doFilter(EncodingFilter.java:23)
    root cause org.apache.jasper.JasperException: Unable to load class for JSP
    org.apache.jasper.JspCompilationContext.load(JspCompilationContext.java:600)
    org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:144)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:329)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    yao.com.vo.EncodingFilter.doFilter(EncodingFilter.java:23)
    root cause java.lang.ClassNotFoundException: org.apache.jsp.BookInfor_jsp
    java.net.URLClassLoader$1.run(URLClassLoader.java:200)
    java.security.AccessController.doPrivileged(Native Method)
    java.net.URLClassLoader.findClass(URLClassLoader.java:188)
    org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:134)
    org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:66)
    org.apache.jasper.JspCompilationContext.load(JspCompilationContext.java:598)
    org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:144)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:329)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    yao.com.vo.EncodingFilter.doFilter(EncodingFilter.java:23)
    note The full stack trace of the root cause is available in the Apache Tomcat/6.0.13 logs.
    --------------------------------------------------------------------------------Apache Tomcat/6.0.13
      

  7.   

    你只需要在servllet中用Java codeList<Book> list=new ArrayList<Book>();
    然后将book中的值取出来存在list中,最后用session.setAttribute("obj", list); 
    要使用el表达式,必须引入jstl.jar,然后在jsp页面里加上Java code
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    Java code<c:forEach var="obj" items="${obj}">
    <td width="90">${obj.bookId}</td>
    <td width="90">${obj.bookName}</</td>
    <td width="90">${obj.duthor}</</td>
    <td width="90">${obj.price}</td>
    <td width="90">${obj.isbn}</td>
    <td width="90">${obj.bookType}</td>
    </c:forEach>
    这样就ok了
      

  8.   

    <td width="90"><c:out value="${sessionScope.obj.getBookid()}"></c:out></td>
    改为
    <td width="90"><c:out value="${obj.bookId}"></c:out></td>
      

  9.   

    import java.util.ArrayList;public class Book {
    private  String bookname;//书籍的名字
    private  String duthor;//书的作者
    private  String isbn;//书的ISBN
    private  double price;//书的价额
    private  String booktype;//书的类型
    private  String published;//出版社名字
    private  int bookid;BookManagerDB BM= new BookManagerDB();public void setBookid( int bookid) {
    this.bookid = bookid;
    }
    public  int getBookid(){
    return bookid;
    }
    public String getBookname() {
    return bookname;
    }
    public void setBookname(String bookname) {
    this.bookname = bookname;
    }
    public String getDuthor() {
    return duthor;
    }
    public void setDuthor(String duthor) {
    this.duthor = duthor;
    }
    public String getIsbn() {
    return isbn;
    }
    public void setIsbn(String isbn) {
    this.isbn = isbn;
    }
    public double getPrice() {
    return price;
    }
    public void setPrice(double price) {
    this.price = price;
    }
    public String getBooktype() {
    return booktype;
    }
    public void setBooktype(String booktype) {
    this.booktype = booktype;
    }
    public String getPublished() {
    return published;
    }
    public void setPublished(String published) {
    this.published = published;
    }public int addBook(String bookname,String duthor,String isbn,double price,String booktype,String published)
    {   if(FileInfo.bookList==null){
           FileInfo.bookList=new ArrayList();
        } 
        BM.readFileDB();
        setBookid(FileInfo.bookIdCounter);
        this.bookname = bookname;
    this.duthor = duthor;
    this.isbn = isbn;
    this.price = price;
    this.booktype = booktype;
    this.published = published;
        return getBookid();
    }
    }
    这是我Book类,为什么大家多要这样改
    <td width="90"> <c:out value="${sessionScope.obj.getBookid()}"> </c:out> </td> 
    改为 
    <td width="90"> <c:out value="${obj.bookId}"> </c:out> </td> 
    我的bookid....==都是private类型,这样能访问吗?还是不太明白!!
      

  10.   

    EL表达式使用时可以指定范围,也可以不指定,不指定是就会默认去每个范围中搜索,以搜到的第一个为准。同时注意到你的<%@page import="com.user.BookManagerDB"%>少了个空格,不只是拷贝的手误还是本来就这样》。
      

  11.   

    自己能解决的为什么自己不解决呢,你都没明白EL表达式用,怎么会懂呢!
    好好自己找点资料练习练习!
    看了你的回复,建议你好好看看session,request,application的概念。
    至于
    这是我Book类,为什么大家多要这样改 
    <td width="90"> <c:out value="${sessionScope.obj.getBookid()}"> </c:out> </td> 
    改为 
    <td width="90"> <c:out value="${obj.bookId}"> </c:out> </td> 
    我的bookid....==都是private类型,这样能访问吗?还是不太明白!!我想说的是,你的这个类都拿出来了,难道还拿不出他的属性吗???
    至于用sessionScope,没有必要用它,因为所有的对象默认就放在SessionScope中
      

  12.   

    EL表达式并不是java语句。
    <c:out value="${obj.bookId}"> 
    这个语句是在可用域里查找叫做obj的变量,然后查找它的bookId属性,并输出。
    并不等同于java中的obj.bookId。
    实际运行的时候,会根据java bean的规范,调用相应的get方法取得这个属性的值。