java – 有缩写吗?

写这样的东西是乏味和丑陋的:

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

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

有没有任何速记。例如(像在JSF中):

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

(适用spring-mvc的解决方案)

这感觉像是一个黑客,但是你可以编写java.util.Map的定制实现,当调用get(key)时,从Spring MessageSource获取消息。该地图可以添加到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。

http://stackoverflow.com/questions/3174373/is-there-a-shorthand-for-fmtmessage-key-key

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:java – 有缩写吗?