日期:2014-05-16  浏览次数:20388 次

jstl 的一些奇怪问题
最近遇到一个比较奇怪的问题

以下是一个bean类
public class PersonBasic {
	protected List<String> chName;
	protected List<String> enName;
	protected List<String> sex;
	protected List<String> birthdate;
	protected List<String> marital;
	protected List<String> height;
	protected List<String> email;

/* .. get set 省略*/
}


假设 已有一个实体personBasic 的sex=[女]

现想在页面遍历显示personBasic.sex

<td>性别</td>
<td>
<c:import url="tmp/StringList_tmp.jsp">
	<c:param name="items" value="${personBasic.sex }"/>
</c:import>
				
<ul>
	<c:forEach items="${personBasic.sex}" var="i" varStatus="s">
		<li>${i}</li>
	</c:forEach>
</ul>
</td>




StringList_tmp.jsp 代码如下
<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<ul>
<c:forEach items="${param.items}" var="i" varStatus="s">
	<li>${i}</li>
</c:forEach>
</ul>


但是 这两种的输出结果 且不同

性别  [女]

       女

为什么 通过
<c:import url="tmp/StringList_tmp.jsp">
<c:param name="items" value="${personBasic.sex }"/>
</c:import>
的会有[]号葛

要怎样改 才可以 令到
<c:import url="tmp/StringList_tmp.jsp">
<c:param name="items" value="${personBasic.sex }"/>
</c:import>
和遍历时输出效果一样没有[]

因为 现在 这个StringList_tmp.jsp 里面的只是 测试代码 实际上 这个模板 会比较复杂  而且 PersonBasic的属性有几十个 都是List<String>的 如果 不用模板来管理的话 维护 会超麻烦……

希望各位 大牛可以帮忙解答一下 大家研究研究
1 楼 thomas0836 2012-09-13  
  最后系 高手Ben的帮助下 完美解决问题


<td>性别</td>
<td>
	<c:set var="itemList" value="${personBasic.sex}"/>
	<%@ include file="tmp/StringList_tmp.jsp"%>
</td>


初步估计
<c:param name="itemList" value="${personBasic.sex }"/> 这里是将 参数 用get方法传到 目标页 所以 这里的List 变成toString了 然后 itemList="[aa,bb]" 在<c:forEach> 解析为 {'[aa','bb]'}


而用<c:set> 将值保存到 request ,<%@ include> 时就可以找到了 而且类型不变