Как создать конфигурацию на странице. Через c: установить?

У меня есть веб-приложение, которое мне нужно для настройки частей со страницы JSF. Так, например, представьте, что мое приложение было разделено на несколько более мелких частей, каждая со структурой папок / файлов, как показано ниже:

/partname
    /config
        config.xhtml
    /template
        generaltemplate.xhtml
    search.xhtml
    results.xhtml

Search.xhtml и results.xhtml используют файл шаблона generaltemplate.xhtml. Этот общий шаблон должен включать содержимое config.xhtml. План состоит в том, чтобы поместить всю общую конфигурацию на эту страницу, чтобы приложения могли получить к ней доступ. Но у меня проблемы с этим.

Если я создаю переменные с помощью ‹c: set› в config.xhtml, то они будут доступны только с этой страницы конфигурации. Раньше я просто изменил бы область видимости на ‹c: set› на запрос, и любая проблема была бы решена. Но поскольку JSF работает по-другому, я знаю, что в этом случае область видимости бесполезна.

Есть ли у кого-нибудь предложения о том, как я собираюсь создать всю свою конфигурацию на этой одной странице, а затем иметь доступ к ней во всем моем приложении?

Это приложение написано с использованием Seam, поэтому можно использовать что-нибудь из Seam.


person Lee Theobald    schedule 08.06.2009    source источник
comment
Я понимаю, что шаблон MVC работает не так, и что я помещаю конфигурацию не в то место. Но, к сожалению, мои руки связаны с этим, и я просто ищу самый простой способ сделать то, что мне нужно.   -  person Lee Theobald    schedule 08.06.2009


Ответы (3)


Предполагая, что вы можете использовать фейслеты, для проблемы c: set:

В вашем шаблоне:

...
<html ...
    xmlns:ui="http://java.sun.com/jsf/facelets"
...
<body>
    <ui:param name="testParam" value="Test" />

    <ui:insert name="test">
    </ui:insert>
...

В этом случае значение ui: param можно использовать как переменную, которая будет использоваться на страницах, использующих шаблон.

Страницы с использованием шаблона:

...
<html ...
    xmlns:ui="http://java.sun.com/jsf/facelets"
...
<body>
<ui:composition template="/WEB-INF/templates/template.xhtml">
    <ui:define name="test">
<h:outputText value="#{testParam}" />
...

С учетом сказанного, я могу вспомнить очень мало случаев, когда это действительно следует использовать. Если ваши руки не связаны, значения должны поступать из bean-компонентов с областью видимости приложения / сеанса.

Редактировать:

Я прошу прощения за то, что не проверил дважды ранее, так как я был очень занят и использовал первый ответ, который пришел в голову, однако я подтвердил, что использование c: set вместо ui: param будет работать одинаково с использованием ранее определенной настройки. Итак, в шаблоне вместо. Это означает, что вам также необходимо включить xmlns: c = "http://java.sun.com/jstl/core", который, я уверен, у вас уже есть.

person codeape    schedule 17.02.2010

Шов - это фреймворк модель-представление-контроллер (MVC). Представление реализовано с использованием страниц JSF. Конфигурация является частью модели, и ее не следует размещать на страницах.

Чтобы реализовать правильное многоуровневое распределение, я предлагаю вам поместить свою конфигурацию в какой-то глобально доступный bean (созданный Seam, возможно, заполненный из файла .properties), на который вы ссылаетесь на своих страницах JSF.

person Kees de Kooter    schedule 08.06.2009

Я не знаю, сколько потребуется рефакторинга, но вы можете создать bean-компонент конфигурации, который будет иметь соответствующую область видимости, а затем использовать теги c: set для установки вашего bean-компонента конфигурации. Затем, позже на своей странице, вы можете использовать компонент конфигурации вместо прямого доступа к переменным.

person Drew    schedule 08.06.2009