Можно ли реализовать динамическое дерево компонентов в JSF? - PullRequest
4 голосов
/ 07 июня 2011

Я пытаюсь построить дерево компонентов в JSF 1.2 (Мохарра), где дерево состоит из нескольких типов узлов соединения и листьев. Каждый листовой узел должен отображаться уникальным способом и должен быть отправлен с потенциальными изменениями. Цель состоит в том, чтобы позволить пользователю обновить логику обработки, где каждый конечный узел представляет операцию, такую ​​как «значение равно» или «значение не равно».

Например:

Root
|
+- InternalNode1 (type I_A)
|  |
|  +- LeafNode1 (type L_A)
|  |
|  +- LeafNode2 (type L_B)
|
+- InternalNode2 (type I_B)
   |
   +- LeafNode3 (type L_B)
   |
   +- LeafNode4 (type L_A)

Каждый тип конечного узла должен отображаться по-разному, в зависимости от потребностей этого типа узла. Кроме того, дерево будет модифицируемым, а узлы могут быть добавлены или удалены с помощью Javascript и обновлений, отправленных обратно на сервер и т. Д. Например, в приведенном выше дереве можно удалить LeafNode4 или изменить его тип на L_B.

Возможно ли это даже с компонентами JSF? Я поступаю неправильно, пытаясь использовать полиморфные компоненты пользовательского интерфейса?

Ответы [ 2 ]

2 голосов
/ 08 июня 2011

Возможно, вы захотите взглянуть на <rich:tree>.

1 голос
/ 08 июня 2011

Можно построить дерево компонентов программно, но это будет неправильный подход для вашего варианта использования.Как правило, было бы небезопасно позволять пользовательскому агенту манипулировать таким серверным кодом.

Было бы лучше использовать модель для управления вашей древовидной структурой (что по сути является подходом , который Дон Робипредлагая .) Данные, составляющие эту модель, можно затем проверить, как и любой другой пользовательский ввод, чтобы убедиться, что злоумышленники не пытаются перевести данные на стороне сервера в недопустимое состояние.

Декларативный подход JSF делаетЭто сложно сделать из коробки (вы можете увидеть пример рендеринга сырого дерева здесь .) Если вы не хотите перетаскивать в стороннюю библиотеку (или писать свой собственный элемент управления), вы можетелучше обрабатывать весь древовидный интерфейс в JavaScript и использовать скрытое поле JSF для его передачи на сервер или с сервера.

...