1

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

.xhtml在一个 JAR 中有一些我们的 portlet 可以看到的通用和支持 bean。我通过覆盖其他帖子中描述的 ResourceResolver 来做到这一点:

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

这是我的问题:我无法让 xhtml 替换messages_en.properties. 我尝试将属性文件移到 JAR 之外并直接放在/lib文件夹中。我还尝试/在名称前添加一个以尝试让解析器找到它。我也把它放在了组件文件夹中。

常见的 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
  • 面孔-config.xml
  • META-INF/components/commonPopups.xhtml
  • META-INF/faces-config.xml - 声明 FilterBean
  • META-INF/Manifest.mf

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_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>
4

1 回答 1

3

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

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

与具体问题无关<message-bundle>,进入的faces-config.xml目的完全不同。它应该覆盖 JSF 默认验证器/转换器返回的 JSF 默认验证/转换消息。它并非旨在提供本地化内容。在那里你使用<resource-bundle>条目或<xxx:loadBundle>标签。我会从faces-config.xml.

于 2011-08-24T15:55:12.743 回答