jstl中怎么实现,查询数据表A后,返回一个lis;然后再根据取出来的某个值,再去查询另一个表B。
而foreach是不可以嵌套。
而我JSP不允许用java代码,这该怎么实现呢?
而foreach是不可以嵌套。
而我JSP不允许用java代码,这该怎么实现呢?
解决方案 »
- lucene3.4 中的Hits是不是被弃用了??
- validator页面验证 急!!!!!!!!!!
- java开发大型网站(流量大,数据大(上万G数据))用什么架构?
- 求pdf转tiff(含多页)程序
- hibernate+spring分页的问题
- welcome页面配置,高分相赠送
- Log4J配置文件的问题
- jbuilder9中编写jsp时产生不正确的语法检查错
- 有没有专门讲学习ejb的例子的书,最好是针对具体的某个appserver的。
- HQL多对一查询出现空指针异常,求解,代码如下
- jpa 使用出问题 ,进来看看 谢谢
- 【100分】Action里面明明定义了result,但是报错说找不到result?
写js就行了
也就是需要在查日志的foreach中有一个评论的foreach,但是这样是不能用的
在jstl中的foreach中,还会有操作表B的java代码
再在这个循环中进行按表A的id去查询表B中评论的数据啊
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);
}
你想实现那个功能的话、可以尝试这样:
你不是查询出A的一个List吗?你可以在实体A里面定义一个B的List或者Set对象、
然后根据A查询出的属性去查询B的List,再set到A里面、之后就直接在页面循环
A的list,至于B的list 你也可以嵌套循环的嘛 直接通过A.B的List或者Set对象
进行foreach 循环、不知道我说明白没有呢??
<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">
</td>
</tr>
<tr>
<td align="left">
${jok.title} 「 来源于网络 」
</td>
<td align="center">
${jok.subDate}
</td>
</tr>
<tr>
<td align="left" colspan="2">
</td>
</tr>
<tr>
<td align="left" colspan="2">
${jok.content}
</td>
</tr>
<tr>
<td align="left" colspan="2">
</td>
</tr>
<tr>
<td align="left">
<img src="img/ping.bmp" onclick="javascript:op_ping('${jok.id}');"/>「 ${jok.jokComCounts} 」
</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">
<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>
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>