JSF 2: какую область следует использовать?

Я смущен относительно того, какую область я должен использовать.

Здесь у меня есть модуль, состоящий из 4-х уровней страниц, таких как просмотр страниц - заголовок страницы - детали страницы этого заголовка - поддетали страницы этой детали. Я думаю, что каждая страница будет иметь свой собственный управляемый компонент.

Самый глубокий уровень, уровень 4 (страница подробных сведений), сможет получить доступ к состоянию любого другого управляемого компонента на внешнем уровне. Уровень 3 (страница сведений) может получить доступ к состоянию управляемого компонента уровня 2 (страница заголовка) и состоянию управляемого компонента уровня 1 (просмотр).

Внешний управляемый компонент не сможет получить доступ к более глубокому состоянию управляемого компонента.

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

Использование области сеанса подойдет, но будет потреблять память, когда пользователь переключается на другие несвязанные программные модули, и эти неиспользуемые компоненты будут оставаться в памяти до тех пор, пока сеанс. И более того, я не могу открыть эти цепочки страниц в разных вкладках.

Использование области диалога также сбивает меня с толку, поскольку у меня нет четких методов begin() и end(), таких как страницы в стиле мастера или страницы викторины. Пользователь может переключаться между этими страницами и выполнять действия на любой странице.

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

Я неправильно думаю?

Пожалуйста, поделитесь своими мыслями.

Спасибо,
Альберт Кам


person Albert Gan    schedule 08.12.2010    source источник
comment
С параметрами вы говорите о параметрах HTTP-запроса?   -  person BalusC    schedule 08.12.2010
comment
Что я имел в виду под передачей параметров представления из одной области просмотра в другую область просмотра, так это тот, который достигается с помощью кнопки h: и вложенного f: param на исходной странице, а также с метаданными f: с вложенным f: viewParam на целевой странице. Я сам не уверен, но это только то, что я могу сейчас придумать, чтобы передать параметры с одной страницы на другую в области просмотра.   -  person Albert Gan    schedule 09.12.2010


Ответы (1)


Вам может помочь новая область Flash в JSF 2. Думайте об этом как о области сеанса, которая очищается после однократного чтения. Это немного отличается от других областей тем, что это не аннотация, а карта. Вы можете поместить всю информацию со страницы 1, которую требует страница 2, в область флэш-памяти, прочитать ее с помощью аннотированного метода PostConstruct на странице 2, затем ввести все данные, необходимые для страницы 3, и так далее. Немного беспорядочно, но, по крайней мере, вам не нужно будет использовать параметры представления. Фактические управляемые компоненты могут находиться в Requestscoped. Это будет выглядеть примерно так:

Уровень 1Бин

@public String toLevel2Button(){
    ELFlash.getFlash().put("data1", object1);
    ELFlash.getFlash().put("data2", object2);
    return "level2";

Level2Бин

@PostConstruct
public void init(){
    object1 = (MyType1)ELFlash.getFlash().get("data1");
    object2 = (MyType2)ELFlash.getFlash().get("data2");
}

public String toLevel3(){
    ELFlash.getFlash().put("data1", object1);
    ELFlash.getFlash().put("data2", object2);
    ELFlash.getFlash().put("data3", object3);
    return "level3";
}

Вы можете найти краткий пример здесь< /а>. Флэш-область также может быть прочитана непосредственно из представления. Помимо этого, я не могу придумать способ передачи данных между представлениями без использования параметров представления.

person Rasmus Franke    schedule 14.01.2011
comment
о Боже мой. я читал об этом когда-то, но я забыл. я не могу отблагодарить вас достаточно !!!!!! Спасибо !! - person Albert Gan; 14.01.2011
comment
очищается после того, как он прочитан один раз - это теоретически идея. Жаль, что на практике это не работает из-за очень ошибочной реализации этой отличной идеи. - person Mike Braun; 21.06.2011