我试图在.xhtml页面上的forEach循环中放入一个Facelet标记,并且我不断收到ClassCastException(详情见下文)。我使用JSF 2.2.2和primefaces 4.0与Tomcat,我的代码看起来像这样:
<c:forEach items="#{bean.comps}" var="comp">
<c:if test="#{comp.name == 'text'}">
<a:inputText value="#{comp.Value}" />
</c:if>
</c:forEach>
相关的支持bean代码
private List<UIComponent> comps = new ArrayList<UIComponent>();
public List<UIComponent> getComps() {
return comps;
}
public void setComps(List<UIComponent> comps) {
this.comps = comps;
}
@PostConstruct
public void init(){
. . . . .
UIComponent comp = new UIComponent();
comp.setName("text");
comp.setValue(val);
comps.add(comp);
. . . . .
}
InputText Facelet是项目中的标准标记,由标签,输入组件和消息字段组成。
我也试过ui:重复循环,但没有区别,结果是一样的。 我甚至尝试将Facelet标签转换为复合组件,但出现了相同的异常。 有谁知道这个问题似乎是什么?
java.lang.ClassCastException: com.sun.faces.facelets.tag.jstl.core.ForEachHandler$ForEachFaceletContext cannot be cast to com.sun.faces.facelets.FaceletContextImplBase
at com.sun.faces.facelets.tag.UserTagHandler.apply(UserTagHandler.java:126)
at com.sun.faces.facelets.tag.jstl.core.ForEachHandler.apply(ForEachHandler.java:230)
at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:95)
at javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:137)
at com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:190)
at javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:120)
at com.sun.faces.facelets.tag.ui.DefineHandler.applyDefinition(DefineHandler.java:106)
at com.sun.faces.facelets.tag.ui.DecorateHandler.apply(DecorateHandler.java:164)
at com.sun.faces.facelets.impl.DefaultFaceletContext$TemplateManager.apply(DefaultFaceletContext.java:395)
at com.sun.faces.facelets.impl.DefaultFaceletContext.includeDefinition(DefaultFaceletContext.java:366)
at com.sun.faces.facelets.tag.ui.InsertHandler.apply(InsertHandler.java:111)
谢谢大家,
答案 0 :(得分:0)
我设法让它发挥作用。按照Rami的链接,我发现提到的错误已在2.2.3版本中修复,所以现在一切都按计划进行。再次感谢。