使用: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
中删除该条目。