如何正确使用<ui:repeat>

How to properly use <ui:repeat>

我在 JSF 页面中使用 <ui:repeat> 时遇到问题。我有一个要传递给它的 arrayList,但是,它从不遍历以显示内容。

我知道有内容,因为当我使用 <h:datatable> 执行完全相同的操作时,它会显示内容。因此,如果有人可以向我解释为什么这在使用 <ui:repeat> 时不起作用但在使用 <h:datatable> 时起作用,那就太好了。

这里是 <h:datatable> 代码:

<h:dataTable value="#{proposalAction.proposal.proposalCountries}" var="pc" rendered="#{proposalAction.proposal.proposalCountries !=null and proposalAction.proposal.proposalCountries.size() > 0}">
    <h:column>
        <img src="/resources/images/flags/#{utils.getValidCountryFlagDisplayCode(pc.country)}.png" title="#{pc.country.getDisplayName(localeSelector.locale)}" alt="#{pc.country.getDisplayName(localeSelector.locale)}" width="20" />      
        &#160;
        <h:outputText value="#{pc.country.getDisplayName(localeSelector.locale)}" />
    </h:column>
</h:dataTable>

这里是使用 <ui:repeat> 代码的代码:

<ul>
    <ui:repeat items="#{proposalAction.proposal.proposalCountries}" var="pc" rendered="#{proposalAction.proposal.proposalCountries !=null and proposalAction.proposal.proposalCountries.size() > 0}">
        <li>
            <img src="/resources/images/flags/#{utils.getValidCountryFlagDisplayCode(pc.country)}.png" title="#{pc.country.getDisplayName(localeSelector.locale)}" alt="#{pc.country.getDisplayName(localeSelector.locale)}" width="20" />      
            &#160;<h:outputText value="#{pc.country.getDisplayName(localeSelector.locale)}" />
        </li>
    </ui:repeat>
</ul>

如您所见,它们是相同的。数据表显示了国家/地区,但中继器在 <ul> 内没有显示任何内容...我不知所措...请帮忙!

如果您有合适的 getter 和设置器,请尝试使用 #{pc.country.displayName} 作为您的 h:outputText 标签的值。 ui:repeat 没有 items 属性,因此请改用 value。我假设 displayName 是主列表中 Country 的 属性。您可以在 getter.

中编写特定的 Locale 逻辑

这应该有效:

<ul>
    <ui:repeat value="#{proposalAction.proposal.proposalCountries}" var="pc" rendered="#{proposalAction.proposal.proposalCountries !=null and proposalAction.proposal.proposalCountries.size() > 0}">
        <li>
            <h:outputText value="#{pc.country.displayName}" />
        </li>
    </ui:repeat>
</ul>

也对您的 img 标签进行此类调整。 您还应该将 rendered 的逻辑放在后端 bean 中,并在 UI 上使用单个布尔值。比如redered="#{displayCountries}