c:forEach循环中的Facelet标记

时间:2014-06-03 08:50:15

标签: jsf primefaces

我试图在.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)

谢谢大家,

1 个答案:

答案 0 :(得分:0)

我设法让它发挥作用。按照Rami的链接,我发现提到的错误已在2.2.3版本中修复,所以现在一切都按计划进行。再次感谢。