Jsf <;c:foreach>;不计算对象的标记

Jsf <;c:foreach>;不计算对象的标记,jsf,foreach,jstl,Jsf,Foreach,Jstl,我有以下代码: <h:outputText value="#{lecture.lectureName}" /> <c:forEach items="#{criterionController.getCriteriaForLecture(lecture)}" var="criterion"> <h:outputText value="#{criterion.criterionName}" /> <h:commandLink val

我有以下代码:

<h:outputText value="#{lecture.lectureName}" />

<c:forEach items="#{criterionController.getCriteriaForLecture(lecture)}" var="criterion">

     <h:outputText value="#{criterion.criterionName}"  />
     <h:commandLink value="Edit"/>
     <h:commandLink value="Delete"/>

</c:forEach>

输出文本部分工作正常,显示了它应该显示的内容,因此这证明
讲座
对象已设置。但是,for-each标记会给出一个空指针异常。当我调试代码时,我看到调用方法
getCriteriaForTeach()
时,讲座对象被视为null


如何解释这种行为?

如果JSF迭代组件(如
等)或者可能是
,根据您的需要,依次设置
讲师
变量,则可能会发生这种情况

关于这种行为的更详细解释可以在这里找到:至此,JSTL标记在构建视图期间运行,而不是在呈现视图期间运行。在特定情况下,
讲师
变量仅在渲染视图期间可用,因此在构建视图期间,当JSTL运行时,该变量始终为
null

要解决这个问题,请使用像
这样的普通JSF组件

<ui:repeat value="#{criterionController.getCriteriaForLecture(lecture)}" var="criterion">
     <h:outputText value="#{criterion.criterionName}"  />
     <h:commandLink value="Edit"/>
     <h:commandLink value="Delete"/>
</ui:repeat>
<ui:repeat value="#{lecture.criterions}" var="criterion">
     <h:outputText value="#{criterion.criterionName}"  />
     <h:commandLink value="Edit"/>
     <h:commandLink value="Delete"/>
</ui:repeat>

另请参见
ui:repeat
c:forEach
尝试更改
ui:repeat
它是相同的,我再次得到一个空指针例外。您的托管bean请求或视图的作用域是什么?另外,为什么要发送整个托管bean而不是属性?它是会话范围的。不,该方法返回一个对象列表,其中我计划在视图中显示一些属性。这不是要做的事吗@LuiggiMendoza@BillJames那是在JSF1.x中。在JSF2中,您可以在EL中调用托管bean方法时传递参数。