一个jsp页面嵌入了java代码,查询出数据库表user的所有记录:
<%
List<User> userList = UserService.getAllUser();
%>如果用下面的形式:
<c:forEach items="<%=userList %>" var="list">
${list.userId};${list.name};
</c:forEach>
${list.userId}获取不到值,对应数据库中的字段是user_id这种组合字段;${list.name}可以取到值,对应数据库中的字段name;
前面那种组合字段为什么取不到值???如果userList直接是后台方法定义的变量传到前台jsp页面,如下面直接在jsp页面调用:
<c:forEach items="${userList }" var="list">
${list.userId};${list.name};
</c:forEach>
这种形式的调用就都能取到值。jspjavac标签

解决方案 »

  1.   

    这个和数据库中的字段名字没有关系,和你的User类里面的名字要一样,检查下是不是不一样?
      

  2.   

    有这种事?
    不应该。
    除非后台的逻辑和下面的不一样
    <%
    List<User> userList = UserService.getAllUser();
    %>
      

  3.   

    你输出User对象看看
    看看User对象中包含哪些成员对象
      

  4.   

    直接数据user对象,看看userid具体是怎么写的
      

  5.   

    User实体类定义了:
    userId,name属性第二种形式list.userId能取到值,至于第一种形式取不到值我觉得是很奇怪,我这里查询取数是直接执行sql语句的,所有没有通过hibernate定义字段之间的对应关系。
      

  6.   

    不明白,jsp页面中传了一个list变量入来,然后只能循环遍历list,再针对每一个实体,取实体的每个属性值了啊。
    你的意思是怎么输出User对象?UserService.getAllUser()方法执行的sql是:
    String sql = "select * from user order by user_id asc;";
    List<User> list = (List<User>) db.queryList(User.class, sql);
    return list;
      

  7.   

    我的意思就是你能不能输出
    user.toString();
    看看你的所有成员变量是什么
      

  8.   

    在jsp页面的java块内输出:
    <%
    .......
    List<User> userList = UserService.getAllUser();
    out.println(userList.get(1).toString());
    out.println(userList.get(1).getUseId());
    out.println(userList.get(1).getName());
    %>
    结果是:
    com.model.User@1911ec8
    0
    李明这里输出就不正常了,难道User实体类的定义要和数据库表user字段一致才可以???
      

  9.   

    我将数据库表user的字段user_id改为id
    User实体类属性userId改为id第一种情况
    <c:forEach items="<%=userList %>" var="list">
    ${list.id};${list.name};
    </c:forEach>
    这两个值都能取出来了。这里就是不明白,在jsp页面java块查出来的记录为什么需要实体User定义的属性和数据库表user的字段一致,页面才能取到值。
    而直接从后台方法传到页面的就不需要这样。
      

  10.   

    这里确实是没有通过hibernate配置它们的对应关系,不过我在执行sql的时候用实体“格式化”了。dao中执行的sql操作如下:
    String sql = "select * from user order by id asc;";
    List<User> list = (List<User>) super.queryForList(User.class, sql);//用实体“格式化”super.queryForList调用的是下面的方法:protected <T> List<T> queryForList(String sql, Class<T> elementType, StatementParameter param) throws SQLException {
    try {
    return this.getJdbcTemplate().query(sql, param.getArgs(), new BeanPropertyRowMapper<T>(elementType));
    }
    catch (EmptyResultDataAccessException e) {
    return null;
    }
    catch (DataAccessException e) {
    throw new SQLException(e);
    }
    }
      

  11.   

    这里确实是没有通过hibernate配置它们的对应关系,不过我在执行sql的时候用实体“格式化”了。dao中执行的sql操作如下:
    String sql = "select * from user order by id asc;";
    List<User> list = (List<User>) super.queryForList(User.class, sql);//用实体“格式化”super.queryForList调用的是下面的方法:protected <T> List<T> queryForList(String sql, Class<T> elementType, StatementParameter param) throws SQLException {
    try {
    return this.getJdbcTemplate().query(sql, param.getArgs(), new BeanPropertyRowMapper<T>(elementType));
    }
    catch (EmptyResultDataAccessException e) {
    return null;
    }
    catch (DataAccessException e) {
    throw new SQLException(e);
    }
    }

    是这样啊,这就要请大牛了
      

  12.   

    <%
    List<User> userList = UserService.getAllUser();
    %>至少要看下userList有没有数据
    可以用打印一个SIZE就行了。java.javasm.com
    System.out.println(userList.size());
      

  13.   


    貌似el表达式取的值就是 对象的get方法 
    也就是说
    User对象中有属性id,name
    对应的get方法为getId()getName()
    那么jsp页面可用${user.id}${user.name}取到值
    就是get后面的单词 第一个变小写 
    如果还是上面的属性
    但是对应的get方法为getIid(),getNname()
    那么通过上面的方法是取不到值的
    要这样${user.iid}${user.nname} 即Iid→iid Nname→nname
      

  14.   

    你已经用了循环了。不用再<%=%>那个集合了。
      

  15.   

    一个jsp页面嵌入了java代码,查询出数据库表user的所有记录:
    <%
    List<User> userList = UserService.getAllUser();
    request.setAttribute("list",userList);
    %><c:forEach items="${list}" var="list">
    ${list.userId};${list.name};
    </c:forEach>
    这样就取出了,版主对jstl,el表达式不熟悉啊, 
    其一:jstl不能喝脚本(<%=  %>)一起使用,必须和el表达式一起使用
    其二:el表达式(${list}),总是在page,request,session.application这个四个范围内搜索对象
      

  16.   

    在jsp页面的java块内输出:
    <%
    .......
    List<User> userList = UserService.getAllUser();
    out.println(userList.get(1).toString());
    out.println(userList.get(1).getUseId());
    out.println(userList.get(1).getName());
    %>
    结果是:
    com.model.User@1911ec8
    0
    李明这里输出就不正常了,难道User实体类的定义要和数据库表user字段一致才可以???
    hibernate配置文件出问题了或者是映射关系没弄对的缘故吧。