JSF t:datatable和c:forEach看起来像冲突

时间:2012-05-02 17:03:55

标签: java jsf

<t:datatable><c:forEach><c:forEach>个项目列表。 (我从后端bean检查过。)

<t:dataTable id="insuranceListTable" rowIndexVar="row" width="100%"
styleClass="table" cellspacing="0" border="0"
value="#{insuranceBackingBean.allInsurancesByPatientId}"
var="insuranceBean">
<h:column>
<f:facet name="header">
    <f:verbatim>Drug Formulary</f:verbatim>
</f:facet>
<h:panelGroup id="formularyInformation">
    <h:panelGroup rendered="#{!empty insuranceBean.response4CheckDrugFormulary.reactionList[0].warningList}">
        <c:forEach items="${insuranceBean.response4CheckDrugFormulary.reactionList[0].warningList}" var="warning">
            <b><span title="${warning.warningText}"><c:out value=" [${warning.warningCode}] "></c:out></span></b>
        </c:forEach>
    </h:panelGroup>
    &nbsp;&nbsp;
    <a4j:commandLink onclick="setVisibleAlternativeListGrid();" rendered="#{!empty insuranceBean.response4CheckDrugFormulary.reactionList[0].drugAlternativeList.alternativeList}">
        <a href="#" id="alternative">Alternative [<h:outputText value="#{insuranceBean.response4CheckDrugFormulary.reactionList[0].drugAlternativeList.count}"></h:outputText>]</a> &nbsp;
    </a4j:commandLink>
    <a4j:commandLink onclick="setVisibleAlternativeListGrid();" rendered="#{!empty insuranceBean.response4CheckDrugFormulary.reactionList[0].coPayList}">
        &nbsp;<a href="#" id="coPay">Co-Pay</a>
    </a4j:commandLink>
</h:panelGroup> 
</h:column>
</t:dataTable>

以下不反映任何事情...... :(

<c:forEach items="${insuranceBean.response4CheckDrugFormulary.reactionList[0].warningList}" var="warning">
        <b><span title="${warning.warningText}"><c:out value=" [${warning.warningCode}] "></c:out></span></b>
    </c:forEach>

1 个答案:

答案 0 :(得分:3)

JSTL标记在视图构建期间运行,其中JSF组件树是基于视图源代码生成的。 JSF组件在视图呈现期间运行,其中HTML输出基于JSF组件树生成。换句话说,JSTL标记和JSF组件不会像编码所期望的那样同步运行。

在您的特定情况下,在<c:forEach>运行的那一刻,${insuranceBean}将始终评估为null,因为它已被定义为JSF var <t:dataTable>那个时刻没有运行的组件。

您需要<t:dataList>而不是<c:forEach>

<t:dataList value="#{insuranceBean.response4CheckDrugFormulary.reactionList[0].warningList}" var="warning">
    <b><span title="#{warning.warningText}"><h:outputText value=" [#{warning.warningCode}] " /></span></b>
</t:dataList>

另见: