Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java <;spring:消息>;标记无法使用数据库中的资源包_Java_Spring_Jsp_Spring Mvc - Fatal编程技术网

Java <;spring:消息>;标记无法使用数据库中的资源包

Java <;spring:消息>;标记无法使用数据库中的资源包,java,spring,jsp,spring-mvc,Java,Spring,Jsp,Spring Mvc,为了这个问题,我在网上搜索了很多次,但令人惊讶的是,我没有找到任何类似的帖子。 这是我的密码: 这是扩展AbstractMessageSource的抽象类 public abstract class DatabaseMessageSourceBase extends AbstractMessageSource { private Messages messages; @Override protected MessageFormat resolveCode(String code,

为了这个问题,我在网上搜索了很多次,但令人惊讶的是,我没有找到任何类似的帖子。 这是我的密码: 这是扩展AbstractMessageSource的抽象类

    public abstract class DatabaseMessageSourceBase extends AbstractMessageSource {

private Messages messages;

@Override
protected MessageFormat resolveCode(String code, Locale locale) {
    String msg = messages.getMessage(code, locale);
    return createMessageFormat(msg, locale);

}

@PostConstruct
public void init() {
    this.messages = extractI18NData();
}

abstract protected Messages extractI18NData();

/**
 * 
 * Messages bundle
 */
protected static final class Messages {

    /* <code, <locale, message>> */
    private Map<String, Map<Locale, String>> messages;

    public void addMessage(String code, Locale locale, String msg) {
        if (messages == null)
            messages = new HashMap<String, Map<Locale, String>>();

        Map<Locale, String> data = messages.get(code);
        if (data == null) {
            data = new HashMap<Locale, String>();
            messages.put(code, data);
        }

        data.put(locale, msg);
    }

    public String getMessage(String code, Locale locale) {
        Map<Locale, String> data = messages.get(code);
        return data != null ? data.get(locale) : null;
    }
}
公共类VerticalDatabaseMessageSource扩展了DatabaseMessageSourceBase{

@Autowired
private LocalizationDao localizationDao;

@Override
protected Messages extractI18NData() {

    List<T_I18N_VERTICAL> tI18NList = localizationDao.getT_I18N_VERTICALData();

    Messages messages = new Messages();
    for(T_I18N_VERTICAL singleResult : tI18NList) {
        messages.addMessage(singleResult.getCode(), new Locale(singleResult.getLocale()), singleResult.getMsg());
    }
    return messages;
}
公共类登录控制器{

@Autowired
private MessageSource messageSourceVertical;

@RequestMapping(value = "/login", method = RequestMethod.GET)
public ModelAndView login(
    @RequestParam(value = "error", required = false) String error,
    @RequestParam(value = "logout", required = false) String logout,
    HttpServletRequest request, HttpServletResponse response) {

    ModelAndView model = new ModelAndView();
    if (error != null) {
        model.addObject("error", "Invalid username and password!");
    }

    if (logout != null) {
        model.addObject("msg", "You've been logged out successfully.");
    }
    // this works.
    // model.addObject("msg", messageSourceVertical.getMessage("app.startup.successful", null, new Locale("en")));

    model.setViewName("login");

    return model;

}
}

我的html:

<spring:message code="app.startup.successful" />

当我使用@Autowired messageSourceVertical服务时,应用程序在控制器中成功检索到消息。但当我使用spring:message时,应用程序无法工作。(它引发异常,显示“在代码“app.startup.successful”…”下找不到消息)


有人能帮忙吗?谢谢。

我找到了问题所在

在JSP中使用spring:message标记时,应用程序查找名为“messageSource”的bean,在我的例子中,我将我的服务显式命名为“messageSourceVertical”

将@Service(“messageSourceVertical”)更改为@Service(“messageSource”)解决了问题

另外请注意,使用Thymeleaf,
“受保护的字符串getMessageInternal(字符串代码,对象[]args,区域设置);”方法被调用,因此必须重写以获得正确的消息。

可能是您有另一个优先的MessageSource bean?请尝试添加@Order(Ordered.HIGHEST_priority)VerticalDatabaseMessageSource beanHi Alexander的注释。我如您所说尝试过,但不幸的是结果仍然是一样的。我认为应用程序会尝试在属性文件中查找消息,而不是在我希望通过标记访问它时调用我的自定义类。
@Autowired
private MessageSource messageSourceVertical;

@RequestMapping(value = "/login", method = RequestMethod.GET)
public ModelAndView login(
    @RequestParam(value = "error", required = false) String error,
    @RequestParam(value = "logout", required = false) String logout,
    HttpServletRequest request, HttpServletResponse response) {

    ModelAndView model = new ModelAndView();
    if (error != null) {
        model.addObject("error", "Invalid username and password!");
    }

    if (logout != null) {
        model.addObject("msg", "You've been logged out successfully.");
    }
    // this works.
    // model.addObject("msg", messageSourceVertical.getMessage("app.startup.successful", null, new Locale("en")));

    model.setViewName("login");

    return model;

}
<spring:message code="app.startup.successful" />