2012-06-21 2 views
1

У меня есть <h:inputText> с помощью прослушивателя событий, как следующее:Переходя выражение метода valueChangeListener в файл тегов

<h:inputText valueChangeListener="#{myBean.handle}"/> 

Я хотел бы поставить его в файл тегов, который будет использоваться следующим образом:

<my:itext changeListener="#{myBean.handle}" /> 

с внутри файла тегов:

<h:inputText valueChangeListener="#{changeListener}" /> 

Однако это оценивая его как свойство а не как метод слушателя. Как передать метод слушателя в файл тега?

+0

Другими словами, '' на самом деле не компонент, а файл тега? – BalusC

+0

Да @BalusC «itext» определяется в тэг-пространстве, называемом «my», и мне нужно указать обработчик вне реального компонента (h: inputText), но в вызывающем (кто пишет мой: itext ...) – Giant2

+0

Используете ли вы JSP или Facelets? Какая версия? – BalusC

ответ

2

Вы можете по дизайну не передавать выражения метода как атрибут файла тега. Вам в основном нужно преобразовать ValueExpression в MethodExpression внутри файла тега.

Для JSF 2.x Facelets это можно решить, используя OmniFaces <o:methodParam>.

<o:methodParam name="changeListenerMethod" value="#{changeListener}" /> 
<h:inputText valueChangeListener="#{changeListenerMethod}" /> 

Однако для старых и устаревших Facelets 1.x или JSP 2.x нет существующего решения. OmniFaces <o:methodParam>, однако, с открытым исходным кодом, вы должны иметь возможность копировать и изменять его для Facelets 1.x или JSP, если это необходимо.

Обратите внимание, что если вы уже используете JSF 2.x, вы также можете использовать composite component. Это поддерживает передачу выражений метода как <cc:attribute method-signature>. Для JSF 1.x вы также можете создать собственный пользовательский компонент real, но это немного больше, чем просто XML.

+0

mmhmm. valueChangeListener = "# {bean.changeListenerMethod}" нуждается в том, что у компонента есть метод changeListenerMethod (ValueChangeEvent e), и я его использую! Проблема передачи «контроллера» заключается в том, что параметр ValueChangeEvent параметра changeListenerMethod не передается, поэтому я не могу выполнять некоторые работы с помощью changechangeevent. Вздох! – Giant2

+0

Я не уверен, понимаю ли я вашу конкретную проблему. Я уже ответил на это. – BalusC

+0

Извините @BalusC, но я не могу использовать другие библиотеки (даже бесплатные или открытые). Я думаю, что создам свои собственные собственные компоненты. Я буду искать руководство Google. – Giant2

Смежные вопросы