Gatein 3.4.0 final состояния портлетов Jboss 5.1.0 и взаимодействие JSR186. Невозможно отобразить несколько портлетов при переходе от одного портлета к другому
У меня есть вопрос о проблеме, которую мы имеем сейчас. Пока я искал в интернете, я не нашел никакой полезной информации.
Так вот в чем вопрос.
В нашей системе мы активно используем портлеты, их 10 десятков из сотен. В некоторых случаях мы хотим показать разные портлеты вместе, потому что некоторые портлеты требуют IPC (межпортлетное взаимодействие для передачи параметров другим портлетам), чтобы пользователь мог легко перейти к следующему портлету без перезаписи необходимых параметров и автоматически вызывать веб-сервисы для получения информация / делать свою работу и т.д...
При переходе на финальную версию Gatein-3.4 в Jboss 5.1.0 этот старый стиль не работает. В настоящее время gatein (eXo gatein) позволяет нам иметь страницу, которая содержит все видимые портлеты, но я хочу, чтобы они были невидимыми (то есть в минимизированном или максимизированном состояниях), максимизированное состояние означает видимое, в противном случае невидимое. В JSR186 у нас есть состояние окна, объект окна и контекст портлета, которые позволяют нам иметь NODE каждого портлета и все другие узлы (узел является портлетом, происходит из PortletNode.class в jar portal-api-lib (у нас его нет) сейчас))
Таким образом, у нас больше нет этой структуры, и мы можем показывать только один портлет за раз.
Интересно, если вы, ребята, знаете лучшее решение, идеи или предложения, которые вы можете дать мне, чтобы пройти эту проблему.
Благодарю.
РЕДАКТИРОВАТЬ:
До сих пор я обнаружил, что использование javascript:AjaxGet расширения GateIn и Richfaces действительно нарушает функциональность. Когда я использую ajax-вызов, такой как следующая ссылка:
javascript:ajaxGet('/ProvPortal/classic/UserPortlet?portal:componentId=99b3433a-585c-471e-928b-d8e4b17fcf02&objectId=minimized&portal:action=ChangeWindowState&ajaxRequest=true')
Позвольте мне использовать другие портлеты. другие портлеты снова становятся работоспособными. Также в объекте Richfaces.panelTabs заполняется информация об оставшихся портлетах, чтобы мы могли получить доступ к портлетам. Может ли быть проблема с ajaxget и Richfaces, которые я еще не знаю?
Спасибо, Агиан.
1 ответ
Для тех из вас, кто работает с Jboss версии 5.1.0 и GateIn версии 3.4 GA.
Позвольте мне объяснить некоторые основные моменты развития портлетов. Прежде всего, портлет - это отдельное приложение, или, точнее, мы можем сказать, что веб-компоненты упоминаются в вики. Может быть собран с jsp/jsf, может быть упакован как война.
Однако GateIn позволяет нам показывать один портлет на странице за раз, но не два или более, или мы не знали, как это сделать?
Для этого нам нужно сделать несколько обходных путей и некоторые улучшения в собственных кодах GateIn. Вы можете проверить, хотите ли вы () раздел в файлах XML и его использование. Этот тег позволяет загружать "портлет" при открытии этого портлета из раздела или меню навигации.
Но этот тег, как упоминалось выше, не позволяет загружать другой портлет. Он просто удаляет старый и помещает новый. Поэтому, если я хочу увидеть более двух портлетов в это время или если я хочу передать параметр этому портлету и увидеть изменения, даже не закрывая предыдущий, что было невозможно.
Есть два решения для этого,
1- В кодах GateIn вы можете создать несколько страниц (или настроить их в xmls), эти страницы могут иметь несколько тегов, но вы должны знать, что будет работать только одно тело страницы, что если страница содержит другой тег страницы тела, мы должны отключить другие теги тела страницы.
Теги тела страницы доступны из кодов GateIn в виде списка, поэтому в этом списке, если вы собираетесь открыть другой портлет под родительским портлетом, это означает, что вы должны включить этот родительский тег тела страницы портлета. всякий раз, когда вы переходите к другому портлету, который считается родительским портлетом, предыдущий портлет будет удален из контекста, и этот новый родительский портлет будет загружен в контекст с тегом тела страницы по умолчанию.
Пример: допустим, у нас есть 2 родительских портлета -User -Domain
и скажем, у нас есть 2 других портлета, которые необходимо открыть как второй портлет на странице, не закрывая портлет Пользователь или Домен.
-a page contains page body{
user portlet with disabled page body tag{
open sub-portlet-a with data X, (a button or a link)
open sub-portlet-b with data Y (a button or a link)
}
}
всякий раз, когда вы выполняете действие в пользовательском портлете, чтобы открыть подчиненный портлет с "PASSED DATA" для вторых подчиненных портлетов, мы включаем тег page-body портлета пользователя в коде входа, который является вторым портлетом с этим "PASSED-DATA". ", будет открыт.
Switch to Domain portlet-> user portlet will be gone
и те же шаги будут применены и к портлету домена. Учтите, что это применимо только в том случае, если в файлах xml настроены портлеты "Домен" и "Пользователь" с одинаковыми подпортлетами.
<!--portlet definitions-->
<user>
<!--some user specific information goes here-->
<a></a> (optional)
<b></b> (optional)
</user>
<domain>
<!--some Domain specific information goes here-->
<a></a> (optional)
<b></b> (optional)
</domain>
как мы уже упоминали, существует два способа открыть второй портлет на странице.
Вот второй.
2- Второе решение этой проблемы не связано с кодами мошенников, или вам не нужно прикасаться к этой области.
Именно с шаблонами groovy, которые идут с определениями портлетов GateIn..gtmpl
шаблоны файлов. Эти файлы имеют доступ к своим создателям. Я имею в виду, что некоторые контейнеры уже доступны из этих файлов шаблонов.gtmpl.
Например, у вас есть UITableColumnContainer.gtmpl
файл и UIContainer
Объект в этом файле шаблона будет доступен для вас. Этот объект предоставит вам контекст, основанный на ваших портлетах. Это означает, что вы можете получить другие портлеты в этих файлах.
Так что теперь я думаю, что мы можем захватить другие портлеты в отличных файлах шаблонов.
В этом случае, если я хочу открыть портлет после нажатия на кнопку или выполнить действие, чтобы открыть второй портлет в структуре моего портала, чтобы я мог его отобразить.
Другие портлеты отображаются по умолчанию (установлено значение false). Теперь w может получать информацию о портлете, который мы хотим открыть, либо по URL-адресу, либо по другому типу вашей собственной реализации, а затем мы можем установить, что этот портлет будет отображаться как True
Это решение, которое мы нашли до сих пор.
и они оба работают нормально, насколько мы реализовали.
Если это как-то поможет вам или, скорее, будет полезным, значит, мы добились определенного прогресса.
Спасибо