JSTL标签取值问题,配合Struts2,急用,在线等。。。。。。。。。。。 本帖最后由 kbzl251 于 2009-12-13 00:33:11 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 楼主可以考虑:1.Vet类里面确实有firstName、lastName、list这三个大小写完全一致的属性,并有相应的get、set方法;2.楼主的jstl是1.2版本的,可以查看下tld标签属性描述文中对forEach标签的描述,看<body-content>元素是否为jsp;如果不是,则改为jsp3.换成jstl1.1的试试 list的属性存放在ServletActionContext.getRequest()。setAbbtritue("list",lst)里面。即可 <c:forEach items="${list}" var="l"> //这里不是直接取得action的成员变量值吗? <span>${l.firstName } </span> <span>${l.lastName } </span> <c:forEach items="${l.list}" var="list"> //① //取出来的对象里还含有一个list,在进行遍历 <span>${list.speName }</span> //② </c:forEach> <br/> </c:forEach> ①处不能再用list了(var="list"),否则,②处的${list.speName }程序以为request作用域中的list。解决:把①处的var值换一个不重名的。 各方法都试过,还是不行。也非常感谢大家。我使用Struts2的标签了。本来不想用的。可是没办法 不懂,struts2正在学习中,42025833 欢迎加入交流一下 我觉得上面给出的答案都不是出错的原因。我觉得你用的struts2的版本比较老,最好告诉是哪个版本的struts2?早期的struts2并没有把action中定义的属性保存到request中,也就是说你定义的private List <Vet> list;根本没有保存在request作用域中,struts2把action中的属性保存在ValueStack这个对象中,然后把ValueStack对象保存在request中:request.setAttribute("struts.valueStack", stack);请看看struts2的原码: Map extraContext; ValueStack stack; String timerKey; extraContext = createContextMap(request, response, mapping, context); stack = (ValueStack)request.getAttribute("struts.valueStack"); if(stack != null) extraContext.put("com.opensymphony.xwork2.util.ValueStack.ValueStack", ValueStackFactory.getFactory().createValueStack(stack)); timerKey = "Handling request from Dispatcher"; UtilTimerStack.push(timerKey); String namespace = mapping.getNamespace(); String name = mapping.getName(); String method = mapping.getMethod(); Configuration config = configurationManager.getConfiguration(); ActionProxy proxy = ((ActionProxyFactory)config.getContainer().getInstance(com/opensymphony/xwork2/ActionProxyFactory)).createActionProxy(namespace, name, extraContext, true, false); proxy.setMethod(method); request.setAttribute("struts.valueStack", proxy.getInvocation().getStack()); if(mapping.getResult() != null) { Result result = mapping.getResult(); result.execute(proxy.getInvocation()); } else { proxy.execute(); } if(stack != null) request.setAttribute("struts.valueStack", stack);所以你在页面上面用EL表达获取不到list对象是正常的,不过struts2.16开始已经解决这个问题了,不仅把对aaction中的属性保存在request中,还保存在了valueStack中。给楼主两种解决方案:1.更换高版本的struts2,最好用2.18(内部解决了很多Debug)2.如果不方便更换版本,可使用struts2的标签,示例如下:<%@taglib uri="/WEB-INF/struts-tags.tld" prefix="s"%>//.......<s:iterator id="user" value="%{list}"> <s:property value="#user.userName"/> //输出内容到网页</s:iterator> 各位大虾们好,我是初出菜鸟 js添加代码后焦点消失,如何解决? IE与火狐解析XML Runtime.exec()调用mfc程序,和dll的问题 struts+spring+hibernate的简单问题. Struts 连接mysql的jdbc 100分求thinking in java!!要中文版的!!! 请教一个字符串替换的问题 请问ibm的websphere该怎么读? JBuilder9创建CMP 连接SQL Server的问题,请帮忙 关于document使用的问题 高分急求一个电信项目的业务流程
1.Vet类里面确实有firstName、lastName、list这三个大小写完全一致的属性,并有相应的get、set方法;
2.楼主的jstl是1.2版本的,可以查看下tld标签属性描述文中对forEach标签的描述,看<body-content>元素是否为jsp;如果不是,则改为jsp
3.换成jstl1.1的试试
即可
<span>${l.firstName } </span> <span>${l.lastName } </span>
<c:forEach items="${l.list}" var="list"> //① //取出来的对象里还含有一个list,在进行遍历
<span>${list.speName }</span> //②
</c:forEach>
<br/>
</c:forEach> ①处不能再用list了(var="list"),否则,
②处的${list.speName }程序以为request作用域中的list。解决:把①处的var值换一个不重名的。
请看看struts2的原码:
Map extraContext;
ValueStack stack;
String timerKey;
extraContext = createContextMap(request, response, mapping, context);
stack = (ValueStack)request.getAttribute("struts.valueStack");
if(stack != null)
extraContext.put("com.opensymphony.xwork2.util.ValueStack.ValueStack", ValueStackFactory.getFactory().createValueStack(stack));
timerKey = "Handling request from Dispatcher";
UtilTimerStack.push(timerKey);
String namespace = mapping.getNamespace();
String name = mapping.getName();
String method = mapping.getMethod();
Configuration config = configurationManager.getConfiguration();
ActionProxy proxy = ((ActionProxyFactory)config.getContainer().getInstance(com/opensymphony/xwork2/ActionProxyFactory)).createActionProxy(namespace, name, extraContext, true, false);
proxy.setMethod(method);
request.setAttribute("struts.valueStack", proxy.getInvocation().getStack());
if(mapping.getResult() != null)
{
Result result = mapping.getResult();
result.execute(proxy.getInvocation());
} else
{
proxy.execute();
}
if(stack != null)
request.setAttribute("struts.valueStack", stack);
所以你在页面上面用EL表达获取不到list对象是正常的,不过struts2.16开始已经解决这个问题了,不仅把对aaction中的属性保存在request中,还保存在了valueStack中。给楼主两种解决方案:
1.更换高版本的struts2,最好用2.18(内部解决了很多Debug)
2.如果不方便更换版本,可使用struts2的标签,示例如下:
<%@taglib uri="/WEB-INF/struts-tags.tld" prefix="s"%>
//.......
<s:iterator id="user" value="%{list}">
<s:property value="#user.userName"/> //输出内容到网页
</s:iterator>