jstl中怎么实现,查询数据表A后,返回一个lis;然后再根据取出来的某个值,再去查询另一个表B。
而foreach是不可以嵌套。
而我JSP不允许用java代码,这该怎么实现呢?

解决方案 »

  1.   

    这个跟嵌套有关系吗?应该是一个事件(比如foreach里的每个tr或者td标签点击事件)传你要参数触发查询B表就Ok了
    写js就行了
      

  2.   

    那你就一次性全部都查询出来撒。然后一起传递给jsp
      

  3.   

     不是的啊,假如我是要查询出来“用户1”的所有日志,但是查询出来的同时,再根据此日志的id来查询其对应的评论。评论肯定不是一条啊,要有foreach的。
    也就是需要在查日志的foreach中有一个评论的foreach,但是这样是不能用的
      

  4.   

    也就是说我想实现的话,就不得不在jsp中去使用java代码
    在jstl中的foreach中,还会有操作表B的java代码
      

  5.   

    可以啊,遍历表A查出来的list,然后可以在做循环的时候取出来各自的id,
    再在这个循环中进行按表A的id去查询表B中评论的数据啊
      

  6.   

    今天做的  发给你看看  ,先要把ResultSet 转换成listimport java.sql.Connection;
    import java.sql.Date;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.ResultSetMetaData;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;import javax.jms.Session;
    import javax.print.DocFlavor.STRING;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionSupport;
    import com.rbac.util.DB;public class ShowAllFileAction extends ActionSupport {
    //把查询结果放在这个List中,在shouAllFile.jsp页面里用jstl循环输出
    List allFileList ;
    Map session;

    public String execute() throws Exception{
    Connection connection = DB.getConnection();
    String sql = "select * from tb_fileroot";
    PreparedStatement ps = connection.prepareStatement(sql);
    ResultSet rs = ps.executeQuery();
    if(rs.next()){
    allFileList=resultSetToList(rs);
    }
    session = ServletActionContext.getContext().getSession();
    session.put("allFileList", allFileList);
    //System.out.println("ShowAllFileAction出现了错误");

    return SUCCESS;
    }



    //将ResultSet类型转为List
    public static List resultSetToList(ResultSet rs) throws Exception{
    ////得到结果集(rs)的结构信息,比如字段数、字段名等 
    ResultSetMetaData md = rs.getMetaData();
    //返回此Resultset对象的列数
    int columnCount = md.getColumnCount();
    List list = new ArrayList();
    Map rowData = new HashMap();
    while(rs.next()){
    rowData = new HashMap(columnCount);   
                for (int i = 1; i <= columnCount; i++) {   
                        rowData.put(md.getColumnName(i), rs.getObject(i));   
                }   
                list.add(rowData); 
    }

      

  7.   

    不是非常明白楼主的需求,既然你都是要在jsp里显示用户的日志及其评论,为什么不在查询日志时将对应的评论都一起查出来?jstl遍历可以嵌套的吧?不行就行struts标签吧
      

  8.   

    首先我想说的是 foreach 是可以嵌套的、
    你想实现那个功能的话、可以尝试这样:
    你不是查询出A的一个List吗?你可以在实体A里面定义一个B的List或者Set对象、
    然后根据A查询出的属性去查询B的List,再set到A里面、之后就直接在页面循环
    A的list,至于B的list 你也可以嵌套循环的嘛 直接通过A.B的List或者Set对象
    进行foreach 循环、不知道我说明白没有呢??
      

  9.   

    我实现的功能是 查询所有作品已经所有作品对应的评论....给你看下页面的foreach 嵌套代码:<table cellSpacing=0 cellPadding=1 width="800" border=0>
    <tr>
    <td align="left" colspan="2">
    <HR style="FILTER: progid:DXImageTransform.Microsoft.Shadow(color:#987cb9,direction:145,strength:15)" width="100%" color=#987cb9 SIZE=1>
    </td>
    </tr>
    <c:forEach var="jok" items="<%=allJok%>"> <tr>
    <td align="left" colspan="2">
    &nbsp;
    </td>
    </tr>
    <tr>
    <td align="left">
    ${jok.title}&nbsp;「 来源于网络 」
    </td>
    <td align="center">
    ${jok.subDate}
    </td>
    </tr>
    <tr>
    <td align="left" colspan="2">
    &nbsp;
    </td>
    </tr>
    <tr>
    <td align="left" colspan="2">
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    ${jok.content}
    </td>
    </tr>
    <tr>
    <td align="left" colspan="2">
    &nbsp;
    </td>
    </tr>
    <tr>
    <td align="left">
    &nbsp;&nbsp;
    <img src="img/ping.bmp" onclick="javascript:op_ping('${jok.id}');"/>「&nbsp;${jok.jokComCounts}&nbsp;」
    </td>
    <td align="center">
    <input type="button" class="btn_ding" id="but_ding_${jok.id}"
    onclick="javascript:operateDing('${jok.id}');" />
    (
    <span id="div_ding_${jok.id}">${jok.ding}</span>)
    <input type="button" class="btn_cai" id="but_cai_${jok.id}"
    onclick="javascript:operateCai('${jok.id}');" />
    (
    <span id="div_cai_${jok.id}">${jok.cai}</span>)
    </td>
    </tr>

    <tr id="div_ping_${jok.id}" style="display:none;">
    <td align="left" colspan="2">
    <HR style="border:3 double #987cb9" width="100%" color=#987cb9 SIZE=3>
    <form action="/doJok.do?opers2=subComment&jokId=${jok.id}" method="post" id="subComment" name="subComment">
    <table cellSpacing=0 cellPadding=1 width="600" border=0>
    <c:forEach var="com" items="${jok.commentSet}"> <tr>
    <td align="left" colspan="2">
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    <font size="2">${com.content}</font>
    </td>
    </tr>
    <tr>
    <td align="right" colspan="2">
    <font size="2">${com.subDate}</font>
    </td>
    </tr>
    <tr>
    <td colspan="2">
    <HR style="border: 1 dashed #987cb9" width="100%" color=#987cb9 SIZE=1>
    </td>
    </tr>
    </c:forEach> <tr>
    <td colspan="2">
    <font size="2">我来说:</font>
    <textarea rows="3" cols="30" id="con_commont_${jok.id}" name="con_commont_${jok.id}" onblur="this.style.color='#999';if(this.value=='') this.value='发表下你的观点...';" 
    onkeyup="if(event.keyCode==13){doSearch();}" onfocus="this.style.color='#000';if(this.value=='发表下你的观点...') this.value='';">发表下你的观点...</textarea>
    <input type="submit" id="sub_commont" value="提  交"/><font size="2" color="red">(提示:评论需审核才能显示)</font>
    </td>
    </tr>
    </table>
    </form>
    </td>
    </tr>
    <tr>
    <td align="left" colspan="2">
    <HR style="FILTER: progid:DXImageTransform.Microsoft.Shadow(color:#987cb9,direction:145,strength:15)" width="100%" color=#987cb9 SIZE=1>
    </td>
    </tr>
    </c:forEach>
      

  10.   


    1、foreach是可以嵌套使用的。
    2、你要实现这样的功能,那么最好就是在后台一次查完,先查询出第一个list,然后循环第一个list,再查询另一张表,将结果塞到map中。map中的key是第一个list的循环对象,value则是根据循环对象查询出的b表的结果集list2。
    这样在画面,双重foreach可以取出来。<table class="table-background" cellpadding="2" cellspacing="1">
    <c:forEach items="${result2}"  var="resultObjs"  varStatus="rowid" >
    <c:if test="${rowid.index == 0}">
    <thead>
    <tr>
    <c:forEach items="${resultObjs }" var="obj">
    <th class="headers" scope="col">${obj}</th>
    </c:forEach>
    </tr>
    </thead>
    </c:if>
    <c:if test="${rowid.index > 0}">
    <tbody>
    <tr class="table-odd-row">
    <c:forEach items="${resultObjs }" var="obj">
    <td class="table-string-column"><spring:escapeBody>${obj}</spring:escapeBody></td>
    </c:forEach>
    </tr>
    </tbody>
    </c:if>
    </c:forEach>
    </table>