<c:if> <c:forEach>标签在jsp里起不了作用了?
<c:forEach>结果:
<c:if>代码:
<c:if>结果:无论有没用户,都是这样不会变的!
就这个异常了 谁帮我解决 我就给分谁 展开
FOREACH标签部分.
首先确认MAP中有没有取得数据.
<c:forEach [var="varName"] items="" [varStatus="varStatusName"]
FOREACH标签含义: items存放被迭代的集合对象, var用来存放现在指到的成员。
3. var元素输出的参数需要与MAP中存放的参数对应,(通常用一个JAVABEAN对像封装放在LIST等集合对像中).案例中的,NAME等值是否在JAVABEAN中存在.如果存在,EL表达式写法为: ${entry.name}即可直接输入,其他值也是一样.
IF标签部分.
EL表达式有自己的判断方式,无法直接用==,!=,>=,<=直接判断.
如果要判断封装对像是否为空.请用empty关键字....
以下是IF标签与FOREACH综合用法的示例:
<!-- 如果集合中不为空,输出数据! -->
<c:if test="${!empty adminlist}">
<c:forEach items="${adminlist}" var="list">
<tr>
<td>${list.id}</td>
<td>${list.name}</td>
<td>${list.pwd}</td>
</tr>
</c:forEach>
</c:if>
<!-- 如果集合中为空,直接在HTML中输出提示! -->
<c:if test="${empty adminlist}">
未能找到数据!
</c:if>
为了能更好的显示出FOREACH的效果.通常先用choose标签进行判断,以下是JSP页面中的完整标签片段示例:(IF标签不再举例.)
<table cellpadding="5" cellspacing="1" border="0" width="100%" align="center">
<tr align="center">
<td>ID</td>
<td>用户帐号</td>
<td>用户密码</td>
<td colspan="2">管理</td>
</tr>
<c:choose>
<c:when test="${!empty userlist}">
<c:forEach items="${userlist}" var="list">
<tr>
<td>${list.id}</td>
<td>${list.name}</td>
<td>${list.pwd}</td>
<td>
<a href="UserEdit.jspx?action=update&id=${list.id}">编缉</a>
</td>
<td>
<div onClick="return del();">
<a href="UserEdit.jspx?action=delete&id=${list.id}">删除</a>
</div>
</td>
</tr>
</c:forEach>
</c:when>
<c:otherwise>
<tr>
<td colspan="5">未能找到符合条件的数据!</td>
</tr>
</c:otherwise>
</c:choose>
</table>
仅从这图上来看</c:forEach>的结束标签哪去了?
在我看来,你依旧没有搞清楚如何用JSTL迭代输出集合对像中的数据集.
简单给你说明下整个流程,以及我的习惯性做法.
首先需要一个集合.这个集合可以是自己添加的LIST,ARRAYLIST,HASHMAP,HASHCODE,MAP等等.也可以是从数据库中查询取出的结果集.
结果集往往代表着一系列的数据,或者说是很多行的数据,而每一行数据中,又有很多列.例如ID,帐号,密码.等等...这一行数据中所有的字段通常做一个包装,可以用vector对像,或者arraylist等等UTIL中的这些集合来存放.但是通常我们在获取表单数据也好,封装对像也好,都会建立一个JAVABEAN,仅仅给它GET和SET方法.专门用来封装单个的数据.
这样一样,可以建立一个叫BookBean的JAVABEAN,它具有name,author,price,description这几个私有属性,并且给它生成GET和SET方法.
public class BookBean {
private String name;
private String author;
private float price;
private String description;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public float getPrice() {
return price;
}
public void setPrice(float price) {
this.price = price;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}
其次,检查输出下你所取的值是否为空。
最后,以上两点检查都未出错,建议关闭重启下编辑器,然后多刷新几次(有时编辑器会抽风的)。
第一:如果是<c:forEach>不可用,那么jsp页面访问的时候会报错
第二:<c:forEach>输出是空,证明你的map没有值
第三:如果你是第一次访问这个页面,那么你没有去访问action,当然map不会有值
第四:如果你是从aciton 里面返回的这个页面,那么你检测下action里面的map是否有get 方法
第五:如果是你servlet 那么你有没有把这个值存入到session ,session 名称为map
第六:<c:if> 里面的判断语句不要写==null 这样不规范,我的建议写法:<c:if test=“not empty suer”>
以上的分析如果你都对了,那么请在action或者你是servlet 中打印下你取得的数据,如果有数据,那么错误就在返回和页面上了,如果没有那么源头就出错了
如果你还有什么不明白的,请继续追问
我补充了问题 应该不会是map的值为空吧? 你再帮我看看谢谢
2014-02-10
是不是打错单词了