I have to check if my property file is empty for certain label based on that I have to render the element but even when the label is empty i still get the element displaying key:
<h:panelGroup rendered="#{not empty I18N['key_hint_message'] }">
<h:outputLabel id="hint_label" value="#{I18N['key_label_hint']}
"></h:outputLabel>
<h:outputText value="#{I18N['key_hint_message']}" ></h:outputText>
</h:panelGroup>
You can use ResourceBundle#containsKey()
for this.
<h:panelGroup rendered="#{I18N.containsKey('key_hint_message')}">
<h:outputLabel value="#{I18N['key_label_hint']}" />
<h:outputText value="#{I18N['key_hint_message']}" />
</h:panelGroup>
You'd better not rely on default format of missing keys as this can be overriden by a custom resource bundle resolver.
JSF implementation displays by defaults missing resources as ???resource???
, So you can use the fn:contains
JSTL function in your rendered
attribute like this:
<h:panelGroup rendered="${not fn:contains(I18N['key_hint_message'], '???')}">
<h:outputLabel id="hint_label" value="#{I18N['key_label_hint']}"/>
<h:outputText value="#{I18N['key_hint_message']}" />
</h:panelGroup>