Параметр действия JSF2

Я прочитал о передаче параметров с страницы jsf в managedbean через actionListener. Можно ли передать параметр простому методу действия?

Спасибо за чтение...


Спасибо вам за советы! Я бы потерялся без тебя:-)

После меня работали:

<h:commandLink id="link" action="#{overviewController.showDetails}" >
   <f:setPropertyActionListener target="#{overviewController.show_id}" value="#{project.id}" />
   <h:outputText value="#{project.title}" />
</h:commandLink>

Итак, кто же заслуживает зеленого тика?: -P могу я дать два из них?

Ответ 1

Да. Или:

action="#{bean.method(param)}"

или

<h:commandButton .. >
    <f:setPropertyActionListener
         target="#{bean.targetProperty}" value="#{param}" />
</h:commandbutton>

(и используйте свойство bean в методе)

Ответ 2

Вы говорите о параметрах в этой форме?

<h:commandButton action="#{bean.action(param)}" />

Это зависит от реализации EL. Только JBoss EL и JSP 2.2 EL способны это сделать. Как установить JBoss EL описано в этом ответе.

В качестве альтернативы вы также можете использовать f:param. f:param используется только для h:commandLink, но с JSF 2.0 он также работает на h:commandButton. Например.

<h:commandButton action="#{bean.action}">
    <f:param name="foo" value="bar" />
</h:commandButton>

с @ManagedProperty, который устанавливает параметр как управляемое свойство bean:

@ManagedProperty("#{param.foo}")
private String foo;

При этом вы, однако, ограничены стандартными типами (String, Number, Boolean). Альтернативой является f:setPropertyActionListener:

<h:commandButton action="#{bean.action}">
    <f:setPropertyActionListener target="#{bean.foo}" value="#{otherBean.complexObject}" />
</h:commandButton>

Тем не менее, есть и другие способы, но все это зависит от единственного функционального требования и областей bean. Вероятно, вам вообще не нужно передавать "параметр".

Ответ 3

Новая спецификация. JSF2 позволяет методу действия получить параметр, чтобы вы могли выполнять

<h:commandButton action="#{bean.action(otherBean.complexObject)}">

в ManagedBean метод будет:

public String action(Object complexObject)

* Примечание: убедитесь, что вы включили "el-impl-2.2.jar" *