gpt4 book ai didi

java - Vaadin 国际化问题 : java. util.MissingResourceException

转载 作者:行者123 更新时间:2023-12-01 13:15:48 25 4
gpt4 key购买 nike

我对 Vaadin 框架还很陌生,我正在尝试制作一个国际化的应用程序。我正在使用 NetBeans,并且已按照以下步骤操作:

  1. 创建一个新的 Vaadin 项目,其中包含一个 UI 类和一个其上的文本字段。
  2. 我进入工具 -> 国际化 -> 国际化向导并按照这些步骤国际化 UI 类。

非常简单。但是当我运行该应用程序时,我收到此异常:

javax.servlet.ServletException: com.vaadin.server.ServiceException: java.util.MissingResourceException: Can't find bundle for base name com/mycompany/i18ntest/Bundle, locale es_AR
com.vaadin.server.VaadinServlet.service(VaadinServlet.java:240)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)

异常表明找不到 Bundle.properties 文件,但它与 UI 类存在于同一包中:

enter image description here

MyVaadinUI.java

package com.mycompany.i18ntest;

import javax.servlet.annotation.WebServlet;
import com.vaadin.annotations.Theme;
import com.vaadin.annotations.VaadinServletConfiguration;
import com.vaadin.server.VaadinRequest;
import com.vaadin.server.VaadinServlet;
import com.vaadin.ui.FormLayout;
import com.vaadin.ui.TextField;
import com.vaadin.ui.UI;
import java.util.ResourceBundle;

@Theme("mytheme")
@SuppressWarnings("serial")
public class MyVaadinUI extends UI {

private final ResourceBundle bundle = ResourceBundle.getBundle("com/mycompany/i18ntest/Bundle");

@WebServlet(value = "/*", asyncSupported = true)
@VaadinServletConfiguration(productionMode = false, ui = MyVaadinUI.class
, widgetset = "com.mycompany.i18ntest.AppWidgetSet")
public static class Servlet extends VaadinServlet {
}

@Override
protected void init(VaadinRequest request) {
TextField textField = new TextField(bundle.getString("MyVaadinUI.textField.caption"));
textField.setRequired(true);
textField.setRequiredError(bundle.getString("MyVaadinUI.textField.requiredError"));

final FormLayout layout = new FormLayout(textField);
layout.setMargin(true);
setContent(layout);
}
}

Bundle.properties

MyVaadinUI.textField.caption = User
MyVaadinUI.textField.requiredError = Please input your user name here
<小时/>

此外,我尝试将 .properties 文件重命名为 Bundle_es_AR.properties,因为我的浏览器的默认语言是西类牙语 (es) 阿根廷 (AR),但没有运气好,仍然遇到异常。

最佳答案

感谢@AndréSchild comment (谢谢)我意识到 WAR 文件不包含 Bundle.properties。经过一些 Google 搜索后,我发现如何通过编辑 this article 中的 pom.xml 文件将资源包含到 Maven 项目中。 。它提供了两种不同的方法来解决我的问题:

将 .properties 文件放入资源文件夹

By default, Maven will look for your project's resources under src/main/resources.

Project 
|-- pom.xml
`-- src
`-- main
`-- resources

这基本上说明我可以简单地将 Bundle.properties 文件放在 resources 文件夹中,它将包含在 WAR 文件中。

enter image description here

此文件将位于类路径的根目录中,因此我必须在 MyVaadinUI.java 类中进行此更改:

private final ResourceBundle bundle = ResourceBundle.getBundle("Bundle");

将文件夹添加为资源编辑pom.xml文件

如果我们想添加一些未放置在 src/main/resources 文件夹中的资源,我们可以编辑 pom.xml 文件添加资源文件夹,如下所示:

<project>
...
<build>
...
<resources>
<resource>
<directory>[our folder here]</directory>
</resource>
</resources>
...
</build>
...
</project>

所以就我而言,我可以这样做:

<project>
...
<build>
...
<resources>
<directory>src/main/java/com/mycompany/i18ntest</directory>
<includes>
<include>*.properties</include>
</includes>
</resources>
...
</build>
...
</project>

生成 WAR 文件时,它将包含类路径根目录中指定资源文件夹的内容(除了 /src/main/resources fodler 内容)。我必须再次进行此更改:

private final ResourceBundle bundle = ResourceBundle.getBundle("Bundle");

注意:尽管 NetBeans 显示资源文件夹中的所有文件,但由于此过滤器,只有 .properties 文件会包含在 WAR 文件中:

     <includes>
<include>*.properties</include>
</includes>

enter image description here

关于java - Vaadin 国际化问题 : java. util.MissingResourceException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22484078/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com