相关疑难解决方法(0)

JSF中的本地化,如何记住每个会话的选定区域设置,而不是每个请求/视图

faces-config.xml:

<application>
    <locale-config>
        <default-locale>ru</default-locale>
        <supported-locale>ua</supported-locale>
    </locale-config>
</application> 
Run Code Online (Sandbox Code Playgroud)

在bean操作方法中,我正在更改当前视图中的语言环境,如下所示:

FacesContext.getCurrentInstance().getViewRoot().setLocale(new Locale("ua"));
Run Code Online (Sandbox Code Playgroud)

问题是应用了uaLocale,但仅适用于每个请求/视图而不适用于会话.同一会话中的另一个请求/视图将语言环境重置为默认ru值.

如何应用会话的区域设置?

session jsf localization internationalization jsf-2

43
推荐指数
1
解决办法
5万
查看次数

无法找到基本名称/ Bundle,locale en_US的包

我正在使用一个依赖于JSF的库.

当我尝试运行我的项目时,它显示以下异常按摩..

java.util.MissingResourceException: Can't find bundle for base name /Bundle, locale en_US
at java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:1427)
at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1250)
at java.util.ResourceBundle.getBundle(ResourceBundle.java:705)
Run Code Online (Sandbox Code Playgroud)

有任何想法吗 ?

java jsf

36
推荐指数
5
解决办法
18万
查看次数

如何从托管bean中获取消息包字符串?

我希望能够从JSF 2托管bean内部的消息包中检索字符串.这可以在将字符串用作FacesMessage抛出异常中的消息中的摘要或详细信息参数的情况下完成.

我想确保托管bean为用户的语言环境加载正确的消息包.我不清楚如何使用JSF API调用从托管bean执行此操作.

我的配置是:

  • 使用Tomcat 7作为容器,因此解决方案不能依赖于仅在完整应用程序服务器容器中工作的API调用
  • 使用JSF 2参考实现(Mojarra)
  • 不使用任何允许CDI的库

注意:我确实看到了类似的问题,但这取决于我的配置中不可用的功能

编辑:我在原来的问题上犯了一个错误.我想要问的是"如何从托管bean中获取资源包字符串"?BalusC给了我正确的答案.我实际要问的解决方案非常相似:

public static String getResourceBundleString(
            String resourceBundleName,
            String resourceBundleKey)
        throws MissingResourceException {
    FacesContext facesContext = FacesContext.getCurrentInstance();
    ResourceBundle bundle = 
        facesContext.getApplication().getResourceBundle(
            facesContext, resourceBundleName);
    return bundle.getString(resourceBundleKey);
}
Run Code Online (Sandbox Code Playgroud)

此外,这里还有一个链接到另一个问题,解释了"消息"包和"资源"包之间的区别.

jsf jsf-2 managed-bean message-bundle

30
推荐指数
3
解决办法
6万
查看次数

单个输入字段的自定义JSF验证器消息

我想为不同的输入字段的每个验证器提供不同的验证消息.

在JSF中是否可以<f:validateLongRange>为每个输入字段的单个验证器(例如)提供不同的验证消息?

validation jsf message

12
推荐指数
1
解决办法
2万
查看次数

它如何与JSF2中的bean验证消息和i18n一起使用?

我创建了验证消息(ValidationMessages.properties)文件,以便在我的项目中实现i18n.

看起来像:

pwtNumber.error=PWT Number error.. 
Run Code Online (Sandbox Code Playgroud)

我在faces-config.xml中定义它:

<message-bundle>com.mycompany.web.i18n.ValidationMessages</message-bundle>
Run Code Online (Sandbox Code Playgroud)

在我的代码中,我以这种方式使用它:

 @Null(message = "{pwtNumber.error}")
    public String getPwtNummer() {
        return pwtNummer;
    }
Run Code Online (Sandbox Code Playgroud)

但问题是我没有收到错误消息,而是来自属性文件的密钥.这是我得到的错误消息:

myForm:pwtNummer: {pwtNumber.error}
Run Code Online (Sandbox Code Playgroud)

我怎么解决呢?

java jsf java-ee bean-validation

8
推荐指数
1
解决办法
9317
查看次数

java.util.MissingResourceException:找不到基本名称resources.application,locale en的包

我的faces-config.xml喜欢下面的内容.

<?xml version="1.0" encoding="UTF-8"?>

<faces-config
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web- 
facesconfig_2_0.xsd"
version="2.0">
<application>
    <message-bundle>resources.application</message-bundle>
    <locale-config>
        <default-locale>en</default-locale>
    </locale-config>
</application>

</faces-config>
Run Code Online (Sandbox Code Playgroud)

Xhtml文件

<f:loadBundle basename="resources.application" var="msg"/>
Run Code Online (Sandbox Code Playgroud)

我得到以下例外

javax.faces.view.facelets.TagAttributeException: //D:/12c_Workspace/VNPO/WebContent/login.xhtml @9,59 <f:loadBundle basename="resources.application"> Can't find bundle for base name resources.application, locale en
    at com.sun.faces.facelets.tag.jsf.core.LoadBundleHandler.apply(LoadBundleHandler.java:233)
    at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:98)
    at com.sun.faces.facelets.compiler.NamespaceHandler.apply(NamespaceHandler.java:93)
    at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:98)
    at com.sun.faces.facelets.compiler.EncodingHandler.apply(EncodingHandler.java:86)
    at com.sun.faces.facelets.impl.DefaultFacelet.apply(DefaultFacelet.java:152)
    at com.sun.faces.application.view.FaceletViewHandlingStrategy.buildView(FaceletViewHandlingStrategy.java:774)
    at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:100)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:594)
    at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:242)
    at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:216)
    at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:132)
    at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:338)
    at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:25)
    at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:74)
    at weblogic.servlet.internal.RequestEventsFilter.doFilter(RequestEventsFilter.java:27)
    at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:74)
    at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3288)
    at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3254)
    at …
Run Code Online (Sandbox Code Playgroud)

resourcebundle faces-config jsf-2

5
推荐指数
1
解决办法
4万
查看次数

如何将 Messages.properties 链接到 facesContext.getApplication().getMessageBundle()?

由于某种原因,以下代码不起作用,我不明白为什么。

@PostConstruct
private void init()
{
    facesContext = FacesContext.getCurrentInstance();
    locale = facesContext.getExternalContext().getRequestLocale();
    messageBundle = 
            ResourceBundle.getBundle(
                    facesContext.getApplication().getMessageBundle(),
                    locale);
    
    
}
Run Code Online (Sandbox Code Playgroud)

当我打电话时getMessageBundle,我得到了一个null导致ResourceBundle.getBundle()抛出的问题NullPointerException。如何将 Messages.properties 链接到调用getMessageBundle(),或者我应该将其翻译为getResourceBundle("bundle")


更新

<message-bundle>我通过在 faces-config.xml 中设置来让它工作。除了将其声明为 a 之外,还有什么方法可以包含它而不加载到每个 .xhtml 文件中<resource-bundle>

jsf

5
推荐指数
1
解决办法
3万
查看次数

如何对将在JSF输出中本地化的列表进行排序

在我的应用程序中,我有一个键(字符串)列表,用户可以在其中选择其中一个.在用户界面中,将根据当前区域设置输出密钥:

<h:selectOneMenu value="#{bean.selectedKey}">
  <f:selectItems value="#{bean.allKeys}" var="_key" itemLabel="#{msgs[_key]}" />
</h:selectOneMenu>
Run Code Online (Sandbox Code Playgroud)

我的设置使用配置的标准资源包,faces-config.xml如BalusC 在本回答中所述.msgs在上面的示例中是资源包变量的名称.

我现在selectOneMenu想要的是,要按字母顺序排序的项目.当然,顺序取决于使用的区域设置.问题是,我不能/不会在backing-bean中进行排序,因为我不知道JSF页面将如何输出密钥.

这个问题对我来说似乎很通用,所以我想知道解决这类问题的最佳做法是什么.

(当然问题不仅适用于selectOneMenu.任何将在用户界面中输出的列表/集合都会遇到同样的问题.)

sorting jsf localization resourcebundle

4
推荐指数
1
解决办法
3996
查看次数

Custom message from @Pattern not shown on a Double property

I am trying to use JSR-303 bean validation.

I added the maven dependency

<dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
    <version>1.1.0.Final</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

I put ValidationMessages_es.properties and ValidationMessages_en.properties in /WEB-INF/classes.

This is the model:

@Pattern(regexp="[0-9]", message="{not.a.valid.number}")
private Double price;
Run Code Online (Sandbox Code Playgroud)

And this is the view:

<p:inputText id="price"
    value="#{inventoryMB.product.price}">
    <f:convertNumber type="number" maxFractionDigits="0" />
</p:inputText>
<p:message for="price" />
Run Code Online (Sandbox Code Playgroud)

当我输入无效数字时,我从验证器收到此消息:

form:price: 'ss' is not a number. Example: 99
Run Code Online (Sandbox Code Playgroud)

来自属性的我的自定义消息不起作用.怎么了?

jsf bean-validation

1
推荐指数
1
解决办法
1438
查看次数