如何正确使用<ui:repeat>

时间:2018-10-19 14:48:02

标签: jsf facelets uirepeat

在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>内的任何内容……我很茫然……请帮助!

1 个答案:

答案 0 :(得分:1)

如果您有合适的吸气剂和吸气剂,请尝试使用#{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}