我有一个用例,我必须使用资源包在 UI 上显示各种文本。其中一些资源包条目带有参数(例如 {0}),对于这些我使用 h:outputFormat 但有时这还不够。
例如
someMessage=Display this message with param {0}
在资源包中。
要在 xhtml 上显示它,我通常会这样做:
<h:outputFormat value="#{msg['someMessage']}"><f:param value="#{someBean.value}"/></h:outputFormat>
当它是一个简单的案例时,这很有效,但对于更复杂的用例,这还不够。例如,如果我希望 commandLink 的“标题”属性使用上述资源包条目:
<h:commandLink action="logout" title="#{msg['someMessage']}">
<f:param value="#{someBean.value}" />
<h:graphicImage library="images" name="image.png" />
</h:commandLink>
这是行不通的。我也试过:
<h:commandLink action="logout">
<f:attribute name="title">
<h:outputFormat value="#{msg['someMessage']}"><f:param value="#{someBean.value}"/></h:outputFormat>
</f:attribute>
<h:graphicImage library="images" name="image.png" />
</h:commandLink>
这也不起作用,因为 f:attibute 不允许孩子。
即使有绕过这个的技巧(例如使用 primefaces 中的悬停组件),也有其他字段可能需要参数化消息。
有谁知道使用 MessageFormat 的方法,该方法在 JSF 组件的非值字段中接受参数?