Вызов и передача параметров в метод actionclass из общей модальной панели (JSF, SEAM) - PullRequest
2 голосов
/ 14 декабря 2011

в нашем проекте у нас много модальных панелей, чтобы пользователь знал, что он собирается делать.все эти панели выглядят одинаково, всего две кнопки («ОК» и «Отмена»).

Единственным отличием является действие, которое выполняет кнопка «ОК».

Теперь моя идея - создать универсальный модпанель, которую я просто вызываю и передаю действие, которое работает нормально, пока мне не нужно передать параметры в метод действия.

Я использую это как кнопку OK:

<a:commandButton
  id="okGenericPanel"
  action="#{actionBean[action]}"
  value="#{messages['wizard.button.ok.label']}"
  oncomplete="#{oncomplete}">
</a:commandButton>

, котораяработает нормально.Вызов этого выглядит следующим образом:

<a:commandLink id="testLink"
   value="#{messages['home.test']}" ajaxSingle="true">
   <rich:componentControl for="genericPanel" 
      attachTo="testLink" operation="show" event="onclick" />
</a:commandLink>
<ui:include src="/components/genericModalPanel.xhtml">
   <ui:param name="actionBean" value="#{adminHomeAction}"/>
   <ui:param name="action" value="sayHello"/>
   <ui:param name="oncomplete" value="alert('im done');" />
</ui:include>

Я уже пытался передать параметр direclty в параметр ui: param следующим образом:

<ui:param name="action" value="sayHello('hello')"/>

или в фактическом вызове:

action="#{actionBean[action]('hello')}"

но ни одна из них не работает.

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

Большое спасибо за любую помощь, Мартин

Ответы [ 2 ]

0 голосов
/ 14 декабря 2011

Пример "фактического вызова" должен работать в EL 2.2, однако в предыдущих версиях Tomcat 7 (и неявно также JBoss 6) и Glassfish 3 была ошибка, из-за которой это не работает. Но это исправлено в текущих версиях. Работает как минимум в Tomcat 7.0.22 и Glassfish 3.1.2.

Смотри также:

0 голосов
/ 14 декабря 2011

Предоставьте параметр как параметр действия, а не как параметр метода:

Сначала передайте его модальной панели:

<rich:componentControl event="onclick" for="genericPanel" operation="show" attachTo="testLink">
    <f:param value="hello" name="helloParam"/>
</rich:componentControl>

Затем передайте его компоненту поддержки при нажатии накнопка:

<a:commandButton id="okGenericPanel" action="#{actionBean[action]}"  value="#{messages['wizard.button.ok.label']}" oncomplete="#{oncomplete}">
    <a:actionparam assignTo="#{someActionBeanField}" value="{helloParam}" converter="..."/>
</a:commandButton>

В атрибуте значения actionparam выше нет знака #.Вам также нужен конвертер, если параметр не является String.

На демонстрационном сайте richfaces есть лучший пример: http://livedemo.exadel.com/richfaces-demo/richfaces/dataTable.jsf?tab=editDataTable&cid=1025315

...