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

Neo*_*s76 23 jsf jsf-2

我有一个显示文件夹内容的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>
Run Code Online (Sandbox Code Playgroud)

但是当我运行此页面时,我收到以下错误:

/browse.xhtml @ 34,110 action ="#{backedBean.updateContents(dContent)}"错误解析:#{backedBean.updateContents(dContent)}
...
...
由以下引起:org.apache.el.parser.ParseException:遇到""(""(""在第1行,第28栏.期待其中一个:
"}"...
"."......
""
""
"" ">"... "gt".. .
"<"...
"lt"...
"> ="......
"ge"
...
......

有趣的是,Netbeans能够自动完成方法名称,所以我想象我的后端bean是好的.仅当我使用参数调用方法时才会出现此问题.

有任何想法吗?

非常感谢

Bal*_*usC 39

传递方法参数在EL 2.2中引入.所以这一点,如果你在一个Servlet 3.0上运行,才可能/ EL 2.2如Tomcat 7,Glassfish的3,JBoss AS中6等能力的容器web.xml是被宣布为每个的Servlet 3.0规范.

<?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>
Run Code Online (Sandbox Code Playgroud)

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

  • 它不是 JSF 2.0 特性。它是 EL 2.2。特征。JSF 2.0 与 Java EE 6 捆绑在一起,后者又捆绑了 Servlet 3.0 / EL 2.2。所以它*看起来*像是一个 JSF 2.0 特性。但是,JSF 2.0 向后兼容 Java EE 5,后者又捆绑了 Servlet 2.5 / EL 2.1,但 EL 2.1 不支持这一点。 (2认同)