本帖最后由 kbzl251 于 2009-12-13 00:33:11 编辑

解决方案 »

  1.   

    楼主可以考虑:
    1.Vet类里面确实有firstName、lastName、list这三个大小写完全一致的属性,并有相应的get、set方法;
    2.楼主的jstl是1.2版本的,可以查看下tld标签属性描述文中对forEach标签的描述,看<body-content>元素是否为jsp;如果不是,则改为jsp
    3.换成jstl1.1的试试
      

  2.   

    list的属性存放在ServletActionContext.getRequest()。setAbbtritue("list",lst)里面。
    即可
      

  3.   

    <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值换一个不重名的。
      

  4.   

    各方法都试过,还是不行。也非常感谢大家。我使用Struts2的标签了。本来不想用的。可是没办法
      

  5.   

    不懂,struts2正在学习中,42025833 欢迎加入交流一下
      

  6.   

    我觉得上面给出的答案都不是出错的原因。我觉得你用的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>