jsf - 自定义 jsf 资源包处理程序时出错
问题描述
在一个项目中,我将自定义 jsf 资源包处理程序。根据这篇文章:
i18n with UTF-8 encoding properties files in JSF 2.0 application
我将以下行添加到我的 faces-config 中:
<application>
<locale-config>
<default-locale>fa</default-locale>
<supported-locale>en</supported-locale>
<supported-locale>fa</supported-locale>
</locale-config>
<message-bundle>ApplicationResources</message-bundle>
<resource-bundle>
<base-name>org.apache.myfaces.bundle.CustomJsfBundleHandler</base-name>
<var>messages</var>
</resource-bundle>
</application>
并创建一个处理程序:
package org.apache.myfaces.bundle;
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
import java.util.PropertyResourceBundle;
public class CustomJsfBundleHandler extends PropertyResourceBundle {
public CustomJsfBundleHandler(InputStream stream) throws IOException {
super(stream);
}
public CustomJsfBundleHandler(Reader reader) throws IOException {
super(reader);
}
@Override
public Object handleGetObject(String key) {
// do some customization
return super.handleGetObject(key);
}
}
但是什么时候转到我的页面我得到以下异常:
java.util.MissingResourceException:找不到基本名称 org.apache.myfaces.bundle.CustomJsfBundleHandler 的包,在 java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:1564) 在 java.util.ResourceBundle.getBundleImpl( ResourceBundle.java:1387) 在 java.util.ResourceBundle.getBundle(ResourceBundle.java:1082) 在 org.apache.myfaces.application.ApplicationImpl.getResourceBundle(ApplicationImpl.java:459) 在 org.apache.myfaces.application.ApplicationImpl .getResourceBundle(ApplicationImpl.java:435) 在 org.apache.myfaces.el.unified.resolver.ResourceBundleResolver.getResourceBundle(ResourceBundleResolver.java:222) 在 org.apache.myfaces.el.unified.resolver.ResourceBundleResolver.getValue(ResourceBundleResolver .java:136)
你有什么主意吗?
解决方案
如果您仍然需要答案:我今天遇到了同样的问题,解决方案如下:您必须类似于此线程中提到的解决方案来实现它:https ://stackoverflow.com/a/3646601/6650315
在您提到的示例中,自定义资源包的完全分类的类名称org.apache.myfaces.bundle.CustomJsfBundleHandler
在faces-config.xml
. 在文件夹内必须创建src/main/resources
目录结构org/apache/myfaces/bundle
,在最后一个目录内必须创建名为customJsfBundleHandler.properties
(and customJsfBundleHandler_de.properties
...) 的文件。所以完整的文件路径应该是src/main/resources/org/apache/myfaces/bundle/customJsfBundleHandler.properties
所以结论是:
- 您的自定义捆绑包实现的完全分类的类名定义了必须在
faces-config.xml
. - 完全分类的类名(base-name)定义了内部的完整目录结构
src/main/resources
- 简单的classname定义了properties文件的名字,用camelCase写
推荐阅读
- r - 如何将标签添加到显示数量(而不是比例)的比例条形图中?
- java - 如何使用 Java 和 Twilio 向多人发送语音呼叫
- strapi - Strapi,使用 find 检查对象类型字段是否在其中一个属性中匹配
- python - 将图像添加到 Tkinter GUI 的第二个窗口
- java - 转到下一页后在 textView 中显示数据
- javascript - 为什么文件加载器很重要?
- bash - ׁׁׁׁ如何将值从 bash 文件返回到 jenkinsfile?
- python - 我如何对新字典 python 进行排序
- database - 数据库架构 - 结构数据
- python - Python解密字节并将它们作为字符串保存在列表中