Почему EL дает мне неправильный объект в качестве параметра между круглыми скобками?
Вопрос
Вот ситуация:
В rich:dataTable в форме a4j:я создаю ссылку a4j:commandLink для выбора значений и передачи их в компонент с помощью синтаксиса действия jboss el.
action="#{bean.myaction(myparameter)}"
Это работает без проблем.
Но если я повторно визуализирую форму для фильтрации данных с помощью ajax-вызова, когда я выбираю значение, это дает мне неправильные результаты:индекс из выборки, но данные до фильтрации.
Есть идеи?
Спасибо, Зак, за то, что дал мне правильное решение всего за 5 минут.
Я думаю, что передача параметра в действии между круглыми скобками более элегантна, но, эй:это работает.:)
Большое спасибо.
P.s.Я тоже редактирую заголовок.
Решение
Попробуйте использовать:
<a4j:commandLink action="#{bean.myaction}">
<f:param name="myparameter" value="paramValue" />
</a4j:commandLink>
а затем получите доступ к этому параметру в своем действии через requestParameter("myparameter")
сквозь FacesContext
.
Кстати, это не jboss EL, это унифицированный язык выражений (EL).Это просто особенность JSP/JSF в целом, как указано в Sun.
Другие советы
В дополнение к ответу Зака я бы сказал, что если вам нужно расширить выражения EL, чтобы иметь возможность вызывать метод с параметрами, вы можете использовать EL-функторы библиотека:
action="#{bean.myaction$[myparameter].action}"
Заполнена ли ваша таблица данных с использованием коллекции, аннотированной @DataModel?Если да, попробуйте удалить его из контекста при фильтрации, чтобы он повторно запрашивался.
например.
//In filter method
Contexts.removeFromAllContexts("yourDataModelCollection");
Помещаем dataTable в <a4j:region>
работал у меня.Таким образом, вы все равно можете использовать параметры JBoss EL.