Spring Web Flow - проблема повторного использования подпотока - PullRequest
0 голосов
/ 30 сентября 2011

Вероятно, это проблема проектирования, а не проблема кодирования.

У нас есть существующий интерфейс упорядочивания, который мы пытаемся преобразовать в Spring Web Flow.Для каждого продукта у нас есть несколько компонентов многократного использования, таких как контактные данные, детали контракта, детали заказа, цены ...

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

например, у меня есть страница «Сведения о сервисе», на которой у меня есть три разных компонента:

    Host Details
    IP Details
    Backup Details

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

Проблема: если я создаю подпоток под названием «Сведения о сервисе», то в связанное представление нужно будет включить все три jsps, а атрибут модели подпотока будет составным атрибутом, который будетнеобходимо связать все вышеперечисленные значения, такие как сведения о хосте, сведения об IP-адресе, сведения о резервном копировании ....

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

1 Ответ

1 голос
/ 30 сентября 2011

Это не совсем относится к веб-потоку - вы хотите создать повторно используемые компоненты представления, которые связаны с компонентами в вашей модели?

Это правда, что в веб-потоке вы можете выполнять автоматическое связывание и проверку только для одного объекта в одной из областей действия переменных, поэтому я предлагаю вам создать компонент для хранения этих трех компонентов, например

public class Holder implements Serializable {

      private HostDetails;
      private IpDetails;
      private BackupDetails;

      //getters & setters
}

Тогда атрибут 'model' в вашем потоке будет ссылаться на экземпляр этого класса Holder.

Вам просто нужно помнить, что если вы хотите связать переданное поле, например, с HostDetails, ваш ввод должениспользуйте точечную нотацию для ссылки на поле (включая «держатель»):

<input type="text" name="holder.hostDetails.hostName"/>

Затем, чтобы повторно использовать компоненты в слое представления, создайте один JSP, который включает в себя другие компоненты.Для этой цели мне нравится создавать файлы .tag, один файл тегов, отвечающий за рендеринг каждого компонента.

<%!-- This is the main JSP --%>

<%!-- Include modules using tag files --%>
<content:hostDetails details="${holder.hostDetails}" nestedPath="holder.hostDetails"/>
<content:ipDetails details="${holder.ipDetails}" nestedPath="holder.ipDetails"/>
<content:backupDetails details="${holder.backupDetails}" nestedPath="holder.backupDetails "/>

Я поместил туда атрибут nestedPath, чтобы файл тегов был модульным и использовался повторновключены в разные страницы (даже без Holder.class).Возможно, есть более элегантный способ сделать этот бит ...

Я не показал здесь реализацию файла тегов, но посмотрите здесь: http://java.sun.com/j2ee/1.4/docs/tutorial/doc/JSPTags5.html

...