当前位置: 首页 > 面试题库 >

如何从PropertyResourceBundle覆盖某些资源

澹台举
2023-03-14
问题内容

我有一个现有的Java / JSF网站,屏幕上的所有文本都是通过 来自属性文件的,该文本将从applicaltion.properties中提取。

对于这些的运行时可配置子集,我想从其他位置(通过Web服务进行CMS)中提取字符串。看一下ResourceBundle类,大概有一个基础设施,可以委派给父ResourceBundle。

我想要这样的东西

public class Applicaltion extends ResourceBundle{
    @Override
protected Object handleGetObject(String key) {
    if(overridenKey(key)){
        return overridedValue(key);
    }
    return null; // ResourceBundle.getObject will delegate to parent 
             // if we return null
}
}

我已经尝试过了,parent是空的,我认为这在默认-> en-> en_GB的情况下更有用。

我正在考虑将属性文件的名称与自定义resourceBundle的名称不同,然后委托CustomResourceBundle.handleGetObject(key)中的整个ResourceBundle.getBundle(PROPERTY_FILE_NAME).getString(key)委派的属性文件不是很吸引人。

还有更好的主意吗?


问题答案:

我最终通过检查是否有覆盖值,是否确实返回了覆盖值来解决了这个问题,否则委托了标准资源包

public class UILabels extends ResourceBundle {


private ResourceBundle getFileResources(){
    return ResourceBundle.getBundle("com.example.web.UILabelsFile", this.getLocale());
}

public Enumeration<String> getKeys() {
    return getFileResources().getKeys();
}

protected Object handleGetObject(String key) {
    if(overrideValue(key)){
        return getOverridenValue(key);
    }
    return getFileResources().getObject(key);
}

}

请注意,名称类与UILabels略有不同,所有客户端将使用的文件均为UILabelsFile,因此ResourceBundle加载程序不会递归。



 类似资料:
  • 我不认为这篇文章我如何覆盖laravel资源路由默认方法?解决了我的问题。 正常的资源路由是“索引”显示所有项目。我想做的是让“索引”显示一个特定ID的所有相关项目。 因此,当我从列表中选择一个教室时,我需要调用的索引操作,以显示该特定教室的所有人员,就像它的索引函数一样。 所以我替换了默认的资源路由 与 所以在我的控制器中,我有这样的内容: 在我的教室里,在一个特定的教室id上,我有这个 就我所

  • 问题内容: 我正在尝试从open jdk更改某些类,所以我正在创建与open jdk类相同的包结构,并且正在使用netbeans更改类。当我在构建项目时,如果覆盖类中出现问题,我会收到错误消息。如果成功构建了我的项目,则应用程序似乎不考虑我对类的更改,而是使用打开的jdk类。知道我该如何使用我的类而不是openjdk的类? 例: 如果我在项目中创建类 _sun.net.www.protocol.h

  • 问题内容: 我正在尝试Backbone.js,而我正在尝试的事情之一就是调用远程API,因此,据我了解的文档资料,我需要能够覆盖Backbone.sync 。 在文档本身中没有如何执行此操作的示例,并且似乎没有用于Backbone的google组…有人可以指出执行此操作的示例吗? 问题答案: 看看这个带注释的源示例,在该示例中,它们被本地存储替代项覆盖 基本上,Backbone.sync应该是一个

  • 我正在寻找一种方法来覆盖GuiceServletContextListener中与guice绑定的jersey资源。我的代码,我正在努力工作: 但不幸的是,这不起作用,虽然我不能像接口一样将jersey资源绑定到实现,但只有work。但是这样的绑定是不可能覆盖的。如果我试图用覆盖,我会收到一个错误而@Path应该是唯一的。那么我的用例有什么解决方案吗?

  • 问题内容: 我目前有量角器安装程序,可以在我们的集成服务器上运行。在protractor.conf.js文件中,我具有以下内容: 从命令行本地运行时,我想覆盖此设置。我尝试了以下失败的尝试 问题: 从命令行本地运行时,如何切换为仅使用chrome的单个实例? 问题答案: 这是个问题。 根据源代码,命令行参数是的别名。 根据文档: 换句话说,由于已指定,因此将被忽略。 您可以尝试从命令行重置: 作为

  • 问题内容: 我创建了一个自定义样式表,该样式表将覆盖Wordpress模板的原始CSS。但是,在我的日历页面上,原始CSS具有声明的每个表格单元格的高度: 有什么办法可以覆盖这个吗? 问题答案: 覆盖!important修饰符 只需使用添加另一个CSS规则,并赋予选择器更高的特异性(向选择器添加其他标签,id或类) 在比现有选择器晚的位置添加具有相同选择器的CSS规则(平局中,最后一个定义的获胜者