我将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>
答案 0 :(得分:1)
Scriptlets 和EL不共享相同的变量范围。 EL将变量解析为PageContext
,HttpServletRequest
,HttpSession
和ServletContext
的属性。 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
标记。默认情况下,它会尝试从请求中提取值,或者您指定的任何范围。