Как использовать большое количество статического текста в приложении JSF? - PullRequest
0 голосов
/ 22 мая 2011

Я создаю приложение JSF, в котором много текста для статического отображения, например, описания и подробности.

Теперь моя проблема в том, что я не могу использовать файл свойств, так как он занимает построчно, и у меня может быть до 100 строк подряд.

База данных также не может быть использована по каким-либо деловым причинам.

Вставка данных непосредственно в тег значения файла face-config.xml - это вариант, который я хочу использовать, если другие варианты невозможны

Теперь я подумал об использовании простого текстового файла и заполнении моего свойства бина напрямую, используя это в классе.

Однако мне трудно это использовать. Путь не является правильным, и происходит некоторое перекрытие свойства bean-компонента.

Я использую Eclipse Helios и Tomcat для разработки. Поэтому, пожалуйста, примите во внимание, что структура каталогов такая же, как и в стандартных проектах Eclipse.

Может кто-нибудь предоставить пример кода или процесс, как это сделать?

Спасибо

Ответы [ 2 ]

0 голосов
/ 22 мая 2011

Существуют различные варианты, и они зависят от того, насколько уникальны страницы с таким большим количеством статического текста и сколько других компонентов JSF они содержат.

Один из вариантов - просто создать свои страницы в отдельных папках, соответствующих поддерживаемым вами языковым стандартам, и создать версии для каждого языкового стандарта. Затем, если вы используете Facelets, пусть эти страницы будут шаблонными клиентами основного шаблона, который содержит ваш общий фрейм сайта (верх, низ и т. Д.).

Это хорошо работает для страниц, которые в основном основаны на тексте. Вы выставите отдельный URL для каждой языковой версии. Например. www.example.com/en/my_page.xhtml ru 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>

(это всего лишь быстрый пример, вместо # {FaceContext.viewRoot.locale} вы также можете использовать вспомогательный компонент, над которым у вас может быть немного больше контроля)

0 голосов
/ 22 мая 2011

Путь не подходит, чтобы быть правильным

Вы можете использовать ClassLoader.getResourceAsStream, чтобы получить входной поток в файл на пути к классам. Например, если ваш текстовый файл имеет значение /WEB-INF/classes/foo.txt, вы можете открыть его следующим образом:

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