使用Adobe CQ 5.5和JSP作为组件对象.在JSTL中返回结果有些麻烦.
我有一个自定义类的数组.
private static class Asset {
private String displayname;
public Asset(){
}
public String getDisplayName() {
return displayname;
}
public void setDisplayName(String displayname) {
this.displayname = displayname;
}
}
Run Code Online (Sandbox Code Playgroud)
这个片段有效,但我想使用JSTL
for (int i = 0; i < assets.size(); i++) {
Asset c = assets.get(i);
out.println(c.displayname + "<BR>");
}
Run Code Online (Sandbox Code Playgroud)
这就是我想要做的:
request.setAttribute("assetList",assets);
%>
<c:forEach items="${assetList}" var="item" varStatus="status">
<p>Title:</p>
${item.displayname}
</c:forEach>
Run Code Online (Sandbox Code Playgroud)
JSTL确实返回了4个项目,例如工作示例,但是只要我添加${item.displayname},我就会收到错误.
Caused by: javax.el.PropertyNotFoundException: Property 'displayname' not found on type org.apache.jsp.apps.pnc_002dideas.components.homepage.slider.slider_jsp$Asset
at javax.el.BeanELResolver$BeanProperties.get(BeanELResolver.java:193)
at javax.el.BeanELResolver$BeanProperties.access$400(BeanELResolver.java:170)
at javax.el.BeanELResolver.property(BeanELResolver.java:279)
at javax.el.BeanELResolver.getValue(BeanELResolver.java:60)
at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:53)
at org.apache.el.parser.AstValue.getValue(AstValue.java:97)
at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186)
at org.apache.sling.scripting.jsp.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:975)
at org.apache.jsp.apps.dideas.components.homepage.slider.slider_jsp._jspx_meth_c_005fforEach_005f0(slider_jsp.java:576)
at org.apache.jsp.apps.pnc_002dideas.components.homepage.slider.slider_jsp._jspService(slider_jsp.java:372)
at org.apache.sling.scripting.jsp.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at org.apache.sling.scripting.jsp.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:497)
Run Code Online (Sandbox Code Playgroud)
使用JSTL时,将根据getter方法名称而非私有字段名称解析属性名称.
因此,当您使用时${item.displayname},它将搜索该方法getDisplayname()而不是getDisplayName().
如下所示,更改您的JSTL
<c:forEach items="${assetList}" var="item" varStatus="status">
<p>Title:</p>
${item.displayName}
</c:forEach>
Run Code Online (Sandbox Code Playgroud)
或者如下所示更改bean中的getter方法以使其正常工作.
public String getDisplayname() {
return displayname;
}
Run Code Online (Sandbox Code Playgroud)
请不要改变它们.
| 归档时间: |
|
| 查看次数: |
1339 次 |
| 最近记录: |