将列表传递给JSP

时间:2012-01-25 19:42:59

标签: java jsp jstl

我将bean列表传递给JSP,然后我想使用JSTL来检索一些数据,但是没有任何内容只填充空标记。 有什么想法吗?

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<jsp:useBean id="mailingbean" scope="request" class="com.dmd.jpa.Imp.AmpImp" />
<jsp:useBean id="mb" class="com.dmd.jpa.entity.Amp" /> 
<%
  mb = mailingbean.getResultProdInfo();

 %>
 <data>
 <item>
    <c:out value="<ColourCd> ${mb.apid} </ColourCd>"/>
 </item>
 </data>

2 个答案:

答案 0 :(得分:1)

Scriptlets 和EL不共享相同的变量范围。 EL将变量解析为PageContextHttpServletRequestHttpSessionServletContext的属性。 Scriptlets 解析仅在方法或类范围中声明的变量。

在这种特殊情况下,您基本上需要将其设置为请求属性:

<%
  mb = mailingbean.getResultProdInfo();
  request.setAttribute("mb", mb);
%>
<data>
  <item>
    <c:out value="<ColourCd>${mb.apid}</ColourCd>" />
  </item>
</data>

然而,这没有任何意义。以下JSP bean声明

<jsp:useBean id="mailingbean" scope="request" class="com.dmd.jpa.Imp.AmpImp" />

已经${mailingbean}提供。所以你需要做的就是

<data>
  <item>
    <c:out value="<ColourCd>${mailingbean.resultProdInfo.apid}</ColourCd>" />
  </item>
</data>

如果你在getter方法中进行数据加载工作,我会把它移到bean的构造函数中,这种工作实际上属于那里。

public class AmpImp {

    private List<Amp> resultProdInfo;

    public AmpImp() {
        // Do the business job here.
        resultProdInfo = loadItSomehow();
    }

    public List<Amp> getResultProdInfo() {
        // Do NOT do the business job here. Just return the property.
        return resultProdInfo;
    } 

    // ...
}

另见:

答案 1 :(得分:0)

如果您确定填充了bean,请尝试按如下方式指定完整的bean:

<c:out value="<ColourCd> ${mailingbean.resultProdInfo.apid} </ColourCd>" />

如果您只使用JSTL(并且远离scriptlet),则可以完全删除jsp:useBean标记。默认情况下,它会尝试从请求中提取值,或者您指定的任何范围。