如何用JSF中的参数调用方法

我有一个JSF页面,显示一个文件夹的内容(实际上是一个Dropbox的帐户内容)。

我正在使用dataTable来呈现ListArray对象的内容:

<h:dataTable style="text-align: left" width="600" var="dContent" value="#{backedBean.contents}"> <h:column> <f:facet name="header"> <f:verbatim>NAME</f:verbatim> </f:facet> <h:commandButton value="#{dContent.fileName}" action="#{backedBean.updateContents(dContent)}"/> </h:column> <h:column> <f:facet name="header"> <f:verbatim>SIZE</f:verbatim> </f:facet> <h:outputText value="#{dContent.size}"/> </h:column> </h:dataTable> 

但是当我运行这个页面时,我得到以下错误:

/browse.xhtml @ 34,110 action =“#{backedBean.updateContents(dContent)}”错误parsing:#{backedBean.updateContents(dContent)}


引起:org.apache.el.parser.ParseException:遇到“”(“”(“”在第1行,第28列。期待以下之一:
“}”…
“” …
“[”…
“>”…
“gt”…
“<”…
“lt”…
“> =”…
“ge”…

有趣的是,Netbeans能够自动完成方法名称,所以我形象说我的后端bean是好的。 只有当我调用一个参数的方法时,才会出现问题。

有任何想法吗?

非常感谢

在EL 2.2中引入了传递方法参数。 所以这只有在运行于Tomcat 7,Glassfish 3,JBoss AS 6等支持Servlet 3.0 / EL 2.2的容器上时才可行, 并且根据Servlet 3.0规范声明了web.xml

 <?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" 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" > <!-- Config here --> </web-app> 

如果不是,那么检查这个答案是否有关获取数据表中的当前行的select,或者这个答案是关于用一个支持传递方法参数的EL实现来替代EL实现,以便你可以在Servlet 2.5 / EL 2.1上使用它容器也是如此。

Jboss Seam也可以帮助获得该function。

Seam使用JBoss EL,它提供了对标准统一expression语言(EL)的扩展。 JBoss EL提供了许多增强function,增强了ELexpression式的performance力和强大function。

例:

使用单引号传递string: <h:commandLink action="#{printer.println('Hello world!')}" value="Hello"/>

或为dynamic值<h:commandButton action="#{hotelBooking.bookHotel(hotel)}" value="Book Hotel"/>

局限性:

因为编译器拒绝带有参数的expression式,所以JBoss EL目前不能用于JSP 2.1。所以,如果你想在JSF 1.2中使用这个扩展,你将需要使用Facelets。 该扩展与JSP 2.0正常工作。

从JSF 1.0开始,实际上已经有了一个“黑客”的方法。 您只需在您的支持bean上创build一个返回Map的方法,并且您可以使用JSF EL将所需的任何对象传递给该方法,因为JSF认为您将密钥传递给了地图。

同时,在你的支持bean方法中,你实际上返回一个“冒名顶替”地图实例,它根本不是一个真正的地图,它的get()方法委托给你想调用的方法。 在.xhtml或.jsp文件中,可以使用方括号表示法来传递variables。

扩展HashMap是使冒名顶图容易定义的一种方法 – 简洁到足以使用匿名内部类的方式。

这是一个黑客攻击,但它在过去对我很有帮助。