如何正确使用<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" />
 
<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" />
 <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}
。
我在 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" />
 
<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" />
 <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}
。