【问题标题】:jsf 2 method parameters action listenerjsf 2 方法参数动作监听器
【发布时间】:2026-02-16 20:35:02
【问题描述】:

有没有办法将变量传递给方法参数:

 <h:commandButton value="Add to Order" 
 actionListener="#{orderBasket.addItems(currentItem.id)}"/>

由于某种原因,这似乎总是将 0 传递给方法。

【问题讨论】:

    标签: methods jsf-2 parameter-passing el


    【解决方案1】:

    只有当你使用action instead of actionListener时才有可能

    <h:commandButton value="Add to Order" 
        action="#{orderBasket.addItems(currentItem.id)}"/>
    

    并且您正在运行支持 Servlet 3.0 / EL 2.2 的容器(Tomcat 7、Glassfish 3、JBoss 6 等)并且您的 web.xml 已声明符合具有以下根声明的 Servlet 3.0 规范

    <web-app
        xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
        version="3.0">
    

    如果后两者不适用于您的情况(例如,您使用的是 Servlet 2.5),那么您需要将 EL 实现替换为另一个支持它的实现,例如 JBoss EL。详情请见this answer

    【讨论】:

    • hhmm...刚刚升级到 jetty 8...更改了 web-xml 仍然有同样的问题..使用 glassfish el-impl。
    • 我的 faces-config 中有这个...org.springframework.web.jsf.el.SpringBeanFacesELResolver...会有问题吗?
    • 啊。问题是我正在从 URL 中检索 currentItem 并且当我提交时它被擦除了..会提出一个单独的问题