2013-05-30 52 views
1

我在我的项目中有一个属性文件message_en.properties message_de.properties,并且我有条目InfoBox_description =欢迎使用这个应用程序和德语对应的值。现在用户应该被允许动态地改变描述,并且同样应该反映在其他属性文件中并且具有正确的转换。我应该这样做吗?我使用JSF2和总理面临提前动态编辑属性文件

+0

如果应该动态更改某些内容,则不应使用属性。重新思考你的设计,因为你打算做的事实在是个坏主意。 –

+0

[在何处放置配置属性文件到JSP/Servlet Web应用程序中?](http://stackoverflow.com/questions/2161054/where-to-place-configuration-properties-files-in-a-jsp -servlet-web-application)虽然在你的具体情况下,我认为存储在数据库中并使用自定义资源包控制是一个更好的解决方案,这样你也可以更好地控制缓存。 – BalusC

+0

@LukŁukaszLech:我同意你的看法,但这对我来说并不合适,但在我的情况下,用户不会经常更改描述,但只需很少的时间,他希望动态地执行此操作,并希望使用属性文件进行转换。 – shreekanth

回答

0

感谢假设你有你的属性文件你的战争中,在源文件夹中的包,你这是怎么加载在托管bean:

Properties properties = new Properties(); 
try { 
    ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); 
    properties.load(classLoader.getResourceAsStream("/yourfile.properties")); 
} catch (IOException e) { 
    // handle exception 
} 

// then initialize attributes with the contents of properties file. Example: 
property1 = properties.getProperty("property1"); 
property2 = properties.getProperty("property2"); 

然后,当用户更新值(提交表格),并要更新的属性文件,请执行下列操作:

properties.setProperty("property1", property1); 
properties.setProperty("property2", property2); 

try { 
    ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); 
    URL url = classLoader.getResource("/yourfile.properties"); 
    properties.store(new FileOutputStream(new File(url.toURI())), null); 
} catch (Exception e) { 
    // handle exception 
} 

如果属性文件是不是在T他的战争(这是在服务器的文件系统),也可以,但有点复杂..

编辑:如BalusC解释的,具有属性文件,你的战争中变化并不方便,因为如果你重新部署你的战争,然后改变失败。如果您有权访问它,您可以将属性文件放入服务器的文件系统中;或不使用属性文件(使用数据库)

+0

该webapp的'/ resources'文件夹没有被类路径覆盖。另外,当WAR不在磁盘文件系统上展开时,写入这种方式完全不起作用,而是在内存中展开。即使它起作用,在重新部署WAR或重新启动服务器时,所有更改都会丢失,原因很简单,原因是这些更改未包含在原始WAR中。 – BalusC

+0

感谢@BalusC的评论。我前段时间实现了这个,我记不起是否放置了属性文件。我想这是在源文件夹中的包中。在我的实现中,我使用了一些服务器配置来访问服务器文件系统中的属性文件,因此重新部署后配置不会丢失,但问题未指定此 – Damian

+0

@BalusC:如果用户动态改变英文,现在该怎么做我也反映德国人的变化吗?反之亦然。是否有任何此转换的API – shreekanth