如何在JSF应用程序中使用大量静态文本?

时间:2011-05-22 14:57:41

标签: java eclipse jsf tomcat file-io

我正在创建一个JSF应用程序,它有很多静态显示的文本,例如描述和详细信息。

现在我的问题是我无法使用属性文件,因为它逐行采用,我可以直接使用多达100行。

数据库也不能用于某些商业原因。

直接在faces-config.xml文件的值标记内粘贴数据是我想要的选项,如果没有其他可能的话

现在我想要使用一个简单的文本文件,并在类中直接使用它来填充我的bean属性。

但是我使用它有困难。路径不是正确的,并且bean属性中也出现了某种重叠。

我正在使用Eclipse Helios和Tomcat进行开发。因此,请将目录结构视为与Eclipse中的标准项目使用的目录结构相同。

有人可以提供示例代码或流程来说明如何执行此操作吗?

由于

2 个答案:

答案 0 :(得分:0)

  

路径不是正确的

您可以使用ClassLoader.getResourceAsStream获取类路径上文件的输入流。例如,如果您的文本文件位于/WEB-INF/classes/foo.txt,则可以像下面这样打开它:

InputStream is = getClass().getClassLoader().getResourceAsStream("/foo.txt");

答案 1 :(得分:0)

有各种选项,它们取决于具有如此大量静态文本的唯一页面以及它们包含多少其他JSF组件。

一种选择是在与您支持的语言环境相对应的单独文件夹中创建页面,并为每个语言环境创建版本。然后,如果您正在使用Facelets,请将这些页面作为包含您的常规网站框架(顶部,底部等)的主模板的模板客户端。

这适用于主要基于文本的页面。您将为每种语言版本公开单独的URL。例如。 www.example.com/en/my_page.xhtml zh www.example.com/nl/my_page.xhtml等。

如果这些页面只包含少量组件,您可以通过ui:include包含这些组件,但这很快就会变得混乱,并且不同语言环境的页面可能会失去同步。要解决这个问题,您可以为每页定义一个模板。此模板本身可以是通用主模板的模板客户端,它包含特定页面所需的所有组件。然后,此模板的最终客户端将填充大量静态文本。

如果您不希望向最终用户公开不同的URL,您还可以选择动态地包含大量静态文本。考虑以下简单的Facelet:

<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"  
    xmlns:ui="http://java.sun.com/jsf/facelets" 
>       
    <h:body>    
        <ui:include src="#{facesContext.viewRoot.locale}/text.xhtml" />     
    </h:body>
</html>

(这只是一个简单的例子,而不是#{facesContext.viewRoot.locale}你还可以使用一个可以有更多控制权的支持bean)