JSF-消息捆绑包始终使用默认属性文件 [英] JSF - message bundle always uses default properties file

查看:87
本文介绍了JSF-消息捆绑包始终使用默认属性文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我无法使用语言环境.

系统

耳朵和战争

玻璃鱼:3.12
Hibernate 4.2-EAR和WAR上的jar
Mojarra:2.1.11
Primefaces:3.3
Omnifaces:1.1

Glassfish: 3.12
Hibernate 4.2 - jar's on EAR and WAR
Mojarra: 2.1.11
Primefaces: 3.3
Omnifaces: 1.1

源文件夹中的属性文件:

messages_de.properties<-使用德语
messages.properties<-使用英语

messages_de.properties <- using german language
messages.properties <- using english language

faces-config.xml:

<locale-config>
    <default-locale>en</default-locale>
    <supported-locale>de</supported-locale>
</locale-config>
<message-bundle>messages</message-bundle>
<resource-bundle>
    <base-name>messages</base-name>
    <var>msg</var>
</resource-bundle>

问题:

示例标签和使用消息捆绑包的所有其他文本是错误的:

Example the label and all other texts using the message bundle are wrong:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:h="http://java.sun.com/jsf/html">
    <f:view locale="de">
        <h:head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        </h:head>
        <h:body>
            <h:form>
                <h:outputLabel for="postalcode" value="#{msg.postalcode_u}: *"/>
                <h:inputText id="postalcode" label="#{msg.postalcode_u}" required="true"/>
                <h:commandButton value="#{msg.save_u}"/>
            </h:form>
        </h:body>
    </f:view>
</html>

所需的验证消息:默认验证消息使用正确的语言.

错误消息:Postalcode: Überprüfungsfehler: Wert ist erforderlich.
它应该是:Postleitzahl: Überprüfungsfehler: Wert ist erforderlich.

Wrong message: Postalcode: Überprüfungsfehler: Wert ist erforderlich.
It should be: Postleitzahl: Überprüfungsfehler: Wert ist erforderlich.

设置:

玻璃鱼3.1.2
Mojarra 2.1.6并已通过2.1.11进行了测试

Glassfish 3.1.2
Mojarra 2.1.6 and also tested with 2.1.11

1.
使用FacesContext.getCurrentInstance().getViewRoot().getLocale()查找相同的消息资源束以显示一些自定义头像消息是不起作用的.

1.
Using FacesContext.getCurrentInstance().getViewRoot().getLocale() to look into the same message resource bundle to display some custom faces messages does not work.

2.
我还有第二个消息捆绑包,当前也在源文件夹中,该文件夹仅由bean访问以显示错误消息:

2.
I also have a second message bundle, currently also in source folder which is only accessed by the beans to display error messages:

errorMessages_de.properties
errorMessages_zh.properties

errorMessages_de.properties
errorMessages_en.properties

使用FacesContext.getCurrentInstance().getViewRoot().getLocale()正确定位了在bean中创建的那些错误消息!

Those error messages created inside the bean are localized correctly using FacesContext.getCurrentInstance().getViewRoot().getLocale()!

3.
使用以下配置的强制"德语仍然不起作用.仍然从messages.properties而不是messages_de.properties检索邮件.

3.
"Forcing" german language using following config still does not work. Messages are still retrieved from messages.properties and not messages_de.properties.

<locale-config>
    <default-locale>de</default-locale>
    <supported-locale>de</supported-locale>
</locale-config>

启动服务器时,出现以下警告:

When i start the server i get this warning:

Unexpected exception when attempting to tear down the Mojarra runtime
java.lang.NullPointerException
    at javax.faces.component.UIViewRoot.setLocale(UIViewRoot.java:1463)
    at com.sun.faces.config.InitFacesContext.getViewRoot(InitFacesContext.java:213)
    at com.sun.faces.application.ApplicationImpl.invokeViewListenersFor(ApplicationImpl.java:2026)
    at com.sun.faces.application.ApplicationImpl.publishEvent(ApplicationImpl.java:291)
    at com.sun.faces.config.ConfigureListener.contextDestroyed(ConfigureListener.java:335)
    at org.apache.catalina.core.StandardContext.contextListenerStop(StandardContext.java:4840)
    at org.apache.catalina.core.StandardContext.stop(StandardContext.java:5584)
    at com.sun.enterprise.web.WebModule.stop(WebModule.java:527)
    at org.apache.catalina.core.ContainerBase.removeChild(ContainerBase.java:1049)
    at com.sun.enterprise.web.WebContainer.unloadWebModule(WebContainer.java:2229)
    at com.sun.enterprise.web.WebContainer.unloadWebModule(WebContainer.java:2184)
    at com.sun.enterprise.web.WebApplication.stop(WebApplication.java:159)
    at org.glassfish.internal.data.EngineRef.stop(EngineRef.java:169)
    at org.glassfish.internal.data.ModuleInfo.stop(ModuleInfo.java:302)
    at org.glassfish.internal.data.ApplicationInfo.stop(ApplicationInfo.java:329)
    at com.sun.enterprise.v3.server.ApplicationLifecycle.unload(ApplicationLifecycle.java:998)
    at com.sun.enterprise.v3.server.ApplicationLifecycle.undeploy(ApplicationLifecycle.java:1024)
    at org.glassfish.deployment.admin.UndeployCommand.execute(UndeployCommand.java:330)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$1.execute(CommandRunnerImpl.java:348)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:363)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1085)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl.access$1200(CommandRunnerImpl.java:95)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1291)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1259)
    at com.sun.enterprise.v3.admin.AdminAdapter.doCommand(AdminAdapter.java:461)
    at com.sun.enterprise.v3.admin.AdminAdapter.service(AdminAdapter.java:212)
    at com.sun.grizzly.tcp.http11.GrizzlyAdapter.service(GrizzlyAdapter.java:179)
    at com.sun.enterprise.v3.server.HK2Dispatcher.dispath(HK2Dispatcher.java:117)
    at com.sun.enterprise.v3.services.impl.ContainerMapper$Hk2DispatcherCallable.call(ContainerMapper.java:354)
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195)
    at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:849)
    at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:746)
    at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1045)
    at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:228)
    at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
    at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
    at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
    at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
    at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
    at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
    at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
    at java.lang.Thread.run(Thread.java:722)

以上错误消息与该问题无关.看看我自己的答案.

The error message above is not relevant for the problem. See my own answer.

推荐答案

属性文件中存在一个条目值,该条目值使用utf-8编码转义了德国变音符号.

There was an entry value in the properties file that escaped a german umlaut using utf-8 coding.

ü -> \u00FC

问题是,我错过了最后一个C,这使属性文件不可读!

The problem was, that I missed the last C which made the properties file somehow unreadable!

无法相信没有打印出适当的错误消息.如果无法幸免,为什么不像在很多情况下一样打印值.

Can't believe no appropriate error message was printed. If it could not be escaped why not just print the value like its done in many cases.

但是该警告消息仍然存在.

But that warning message is still present.

这篇关于JSF-消息捆绑包始终使用默认属性文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆