Кнопка Command внутри страницы композиции в JSF

У меня та же проблема, о которой пользователь1598186 заявил в своем вопросе здесь: p:commandButton не вызывает метод компонента на странице ‹ui:include›

Однако решения так и не было дано (он вообще удалил теги <ui:include> и вместо них использовал переменные)

Существуют ли какие-либо способы использования <ui:include> и по-прежнему выполняется мой метод вспомогательного компонента, когда я вызываю его внутри commandButton.

Любая помощь будет высоко ценится.


person sciFi    schedule 19.02.2013    source источник


Ответы (1)


Параметры метода EL 2.2 (таким образом, #{bean.method()} вместо #{bean.method}) можно использовать для передачи подписи метода, которую можно использовать в атрибуте actionListener элемента commandButton. Ниже приведен пример передачи свойства ManagedBean, а также передачи сигнатуры метода:

Главная страница

<ui:include src="/jointeam.xhtml">
  <ui:param name="propertyValue" value="#{managedBean.property1} />
  <ui:param name="method" value="#{managedBean.performAction()}" />
</ui:include>

jointeam.xhtml

...

<h:inputText value="#{propertyValue}" />

...

<p:commandButton value="Submit" actionListener="#{method}" />

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

person maple_shaft    schedule 19.02.2013
comment
Большое спасибо. Это очень помогло! - person sciFi; 20.02.2013
comment
Будет ли работать <ui:param>, даже если перенаправление выполняется методом в компоненте? например: <ui:include src="#{managedBean.navigation}"> <ui:param name="method" value="#{managedBean.method}"> </ui:include> Пожалуйста, помогите.. - person sciFi; 21.02.2013
comment
@sciFi Я считаю, что атрибут src принимает строковое свойство, поэтому, если навигация возвращает действительный ПУТЬ К ФАЙЛУ, он должен работать. Помните, что этот компонент включает файл xhtml, а не запрашивает страницу xhtml. - person maple_shaft; 21.02.2013
comment
я возвращаю имя страницы (используя условие if) в моем bean-компоненте, поэтому это строка, которая возвращается как my_page.xhtml, но параметр, переданный с использованием <ui:param>, не читается внутри my_page (который находится внутри <ui:compostion>. Я делаю что-то неправильно ? Пожалуйста помоги.. - person sciFi; 21.02.2013
comment
@sciFi Хммм ... возможно, вы можете опубликовать свой код в отдельном вопросе? Трудно диагностировать проблемы в разделе комментариев. - person maple_shaft; 21.02.2013
comment
Я разместил его как отдельный вопрос ссылка здесь. если мой вопрос все еще не ясен, пожалуйста, сообщите мне. Любая помощь будет очень признательна. Спасибо. - person sciFi; 21.02.2013
comment
Это вообще не сработает. Выражение метода интерпретируется как выражение значения. См. ответ на последующий вопрос OP. - person BalusC; 21.02.2013
comment
@BalusC Я понимаю, что ваш ответ тоже работает хорошо, но я говорю вам, правильно это или нет, атрибут Primefaces actionListener при передаче commandButton методу из ui: param таким образом работает. Я смотрю на свой рабочий код прямо сейчас на Primefaces 3.2, и этот код работает для меня, только на Primefaces CommandButton actionListener, но он работает. Попробуйте сами и убедитесь. - person maple_shaft; 21.02.2013
comment
Вероятно, это будет EL 2.2 () в названии метода. У вас работает без них? И на разных серверах? - person BalusC; 21.02.2013
comment
@BalusC Я только что проверил, и он не работает без функции EL 2.2 (). - person maple_shaft; 21.02.2013
comment
@BalusC Спасибо, что разъяснили это, сегодня я узнал кое-что новое! :) - person maple_shaft; 21.02.2013