好的,现在这是完整且随时可用的解决方案:(感谢@Joop Eggen)
上课
public final class EnumTranslator { public static String getMessageKey(Enum<?> e) { return e.getClass().getSimpleName() + '.' + e.name(); }}使其成为自定义EL功能
<?xml version="1.0" encoding="UTF-8"?><facelet-taglib xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facelettaglibrary_2_0.xsd"version="2.0"><namespace>http://example.com/enumi18n</namespace><function> <function-name>xlate</function-name> <function-class>your.package.EnumTranslator</function-class> <function-signature>String getMessageKey(java.lang.Enum)</function-signature></function></facelet-taglib>
将taglib添加到您的web.xml
<context-param> <param-name>javax.faces.FACELETS_LIBRARIES</param-name> <param-value>/WEB-INF/enumi18n.taglib.xml</param-value></context-param>
具有这样的属性文件enum_en.properties和enum_yourlanguage.properties
TransferStatus.NOT_TRANSFERRED = Not transferredTransferStatus.TRANSFERRED = Transferred
将属性文件作为资源包添加到您的faces-config.xml中
<resource-bundle> <base-name>kk.os.obj.jsf.i18n.enum</base-name> <var>enum</var> </resource-bundle>
将自定义标签库添加到您的xhtml文件中
<html ... xmlns:l="http://example.com/enumi18n">
并且-voilà-您现在可以在jsf中访问已转换的枚举值:
<h:outputText value="#{enum[l:xlate(order.transferStatus)]}" />


