2010-08-30 5 views
10

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

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


Благодарим вас за ваши советы! Я был бы потерян без тебя :-)

Вслед работал для меня:

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

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

ответ

13

Да. Либо:

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

Или

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

(и использовать свойство компонента в методе)

13

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

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

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

В качестве альтернативы вы также можете использовать 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, который устанавливает параметр как управляемом свойства компонента:

@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> 

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

3

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

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

на ManagedBean метод будет:

public String action(Object complexObject) 

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

+0

Это не спецификация JSF. Это EL, и часть Servlet 3.0/JSP 2.2 (Tomcat 7, Glassfish 3, JBoss AS 6 и т. Д.). Поэтому, когда вы запускаете JSF 2.0 на Servlet 2.5, это не сработает. Это независимо от версии JSF. – BalusC

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