Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to pass method arguments to an ActionListener?

Tags:

el

jsf-2

I'm creating a dynamically generated menu. In the database, I have stored the directory (String) of each submenu and stored in an ArrayList in the bean. This is a part of the code:

<c:forEach items="#{controlWeb.algorithms}" var="alg">
    <h:form>
        <h:commandLink actionListener="#{controlWeb.setContent(PROBLEM)}"  value="About"/>
    </h:form>
</c:forEach>

The problem is in "PROBLEM". I want to write #{alg.algorithm1} and it doesn't work because I think it isn't posible to nest EL expressions.

The actionListener set the String #{alg.algorithm1} in another String. How can I achieve the requirement?

like image 491
Roberto Avatar asked Jan 31 '12 16:01

Roberto


1 Answers

Use action, not actionListener. The actionListener must be bound to a method which takes ActionEvent as the sole argument, no excuses. Also, an actionListener isn't intented to invoke actions, but to listen on actions (so that you can log it or do some preprocessing task or whatever).

<c:forEach items="#{controlWeb.algorithms}" var="alg">
    <h:form>
        <h:commandLink action="#{controlWeb.setContent(alg.algorithm)}" value="About"/>
    </h:form>
</c:forEach>

Note that passing arguments in EL is only supported since EL 2.2 which is shipped along Servlet 3.0 / Java EE 6. You need to make sure that you're targeting a Servlet 3.0 compatible container with a Servlet 3.0 compatible web.xml.

See also:

  • Differences between action and actionListener
  • How to call a method with a parameter in JSF
like image 71
BalusC Avatar answered Nov 15 '22 10:11

BalusC