如何查看消息.使用JSF在Jar中添加属性



使用:JSF 1.2, Facelets 1.1.15, GateIn 3.1 GA, Richfaces 3.3.3

我在JAR中有一些常见的.xhtml和支持bean,我们的portlet可以看到它们。我通过重写ResourceResolver来做到这一点,正如在其他帖子中所描述的:

  • http://ocpsoft.com/opensource/create-common-facelets-jar/
  • 如何使用Facelets组合与来自另一个上下文的文件

portlet可以加载XHTML并使用支持bean。

我的问题是:我无法让xhtml替换messages_en.properties中定义的消息。我试过将属性文件移出JAR并直接放置在/lib文件夹中。我还尝试将/放在名称前面,试图让解析器找到它。我也把它放在components文件夹中。

常见的jar信息是:我有一个my-portlet-common-resources.jar驻留在server/my-portal/lib。jar的结构如下:

  • com/portlet/common/CustomResourceResolver.class
  • com/portlet/common/FilterCreateBean.class -支持普通弹出窗口的bean
  • messages_en.properties
  • faces-config.xml
  • meta - inf/组件/commonPopups.xhtml
  • META-INF/faces-config.xml -声明FilterBean
  • meta - inf/manifest . mf

faces-config.xml contents:

<?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_1_2.xsd"
    version="1.2">
    <application>
        <locale-config>
            <default-locale>en</default-locale>
        </locale-config>
        <message-bundle>/messages_en.properties</message-bundle>
    </application>
    <managed-bean>
        <managed-bean-name>FilterCreateBean</managed-bean-name>
        <managed-bean-class>com.portlet.common.FilterCreateBean</managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
    </managed-bean>
</faces-config>

包含commonPopups.xhtml(部分剪辑)中的消息:

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:c="http://java.sun.com/jstl/core"
    xmlns:a4j="http://richfaces.org/a4j"
    xmlns:rich="http://richfaces.org/rich">
    <a4j:loadBundle basename="messages" var="msgs"/>
    <rich:panel style="border-style:none;" id="addNewChainPanel">
    <rich:modalPanel id="modalNewChainPanel" autosized="true">
        <f:facet name="header"><h:outputText value="#{msgs['filterset.modal.new.title']}" /></f:facet>
</ui:composition>

应该可以。也许你已经有一个messages*.properties文件在你的主web应用程序的类路径根。这在类加载中具有优先级。你需要把它放在一个更具体的包装里。例如,将JAR的一个放在com/portlet/common文件夹中,使其成为com.portlet.common包的成员。这样就可以通过:

<a4j:loadBundle basename="com.portlet.common.messages" var="msgs"/>

与具体问题无关,faces-config.xml中的<message-bundle>条目具有完全不同的目的。它应该覆盖JSF默认验证器/转换器返回的JSF默认验证/转换消息。它不打算提供本地化的内容。在这里使用<resource-bundle>条目或<xxx:loadBundle>标记。我将从faces-config.xml中删除该条目。

相关内容

  • 没有找到相关文章

最新更新