是否有<fmt:Messagekey=“key”/>的缩写?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (24)

写这样的东西既乏味又丑陋:

<input type="button" value="<fmt:message key="submitKey" />" />

如果您想在另一个标记的属性中嵌套消息标记,则情况会变得更糟。

有什么简略的说法吗。例如(如JSF中的):

<h:commandButton value="#{msg.shareKey}" />

(只适用于SpringMVC的解决方案)

提问于
用户回答回答于

这感觉像是一种破解,但你可以编写一个java.util.Map的自定义实现,当get(key)被调用时,它会从Spring MessageSource中获取消息。 这个Map可以添加到模型的msg下,允许使用$ {msg.myKey}取消引用消息。

也许还有一些动态结构比JSP EL认可的动态结构不是一个Map,但我不能想到一个。

public class I18nShorthandInterceptor extends HandlerInterceptorAdapter {

    private static final Logger logger = Logger.getLogger(I18nShorthandInterceptor.class);

    @Autowired
    private MessageSource messageSource;

    @Autowired
    private LocaleResolver localeResolver;

    @Override
    public boolean preHandle(HttpServletRequest request,
            HttpServletResponse response, Object handler) throws Exception {

        request.setAttribute("msg", new DelegationMap(localeResolver.resolveLocale(request)));

        return true;
    }

    private class DelegationMap extends AbstractMap<String, String> {
        private final Locale locale;

        public DelegationMap(Locale locale) {
            this.locale = locale;
        }

        @Override
        public String get(Object key) {
            try {
                return messageSource.getMessage((String) key, null, locale);
            } catch (NoSuchMessageException ex) {
                logger.warn(ex.getMessage());
                return (String) key;
            }
        }
        @Override
        public Set<Map.Entry<String, String>> entrySet() {
            // no need to implement this
            return null;
        }

    }
}

作为替代办法:

<fmt:message key="key.name" var="var" />

然后使用$ {var}作为常规EL。

用户回答回答于

如果您只需要一个快捷方式,就可以创建一个标记文件,比如btn.tag

<%@tag%>
<%@ attribute name="key" required="true" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>

<input type="button" value="<fmt:message key="${key}" />" />

像这样使用它

<%@ taglib tagdir="/WEB-INF/tags" prefix="tags"%>
...
<tags:btn key="submitKey" >
...

扫码关注云+社区