我有一个显示文件夹内容的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)}” 错误解析:#{backedBean.updateContents(dContent)}
...
...由以下原因引起:org.apache.el.parser.ParseException:遇到“ “(”“”(“”第1栏第28栏。期待以下之一:
“}”...
“” ...
“[”...
“&gt;” 中...
“gt”......
“&LT;” ...
“lt”......
“&gt; =”...
“ge”...
...
...
有趣的是,Netbeans能够自动填充方法名称,因此我想象我的后端bean是可以的。仅当我使用参数调用方法时才会出现此问题。
有什么想法吗?
非常感谢
答案 0 :(得分: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>
如果不是,请检查this answer以获取有关获取数据表中当前行的替代方法,或this answer关于将EL实现替换为支持传递方法参数的方法,以便您也可以在Servlet 2.5 / EL 2.1容器上使用它。
答案 1 :(得分:1)
自JSF 1.0以来,实际上有一种“黑客”方式。您只需在您的支持bean上创建一个返回Map的方法,您就可以使用JSF EL将任何对象传递给该方法,因为JSF认为您将密钥传递给了地图。
同时,在你的支持bean方法中,你实际上返回一个根本不是地图的“冒名顶替”地图实例,其get()
方法委托给你想要调用的方法。在.xhtml或.jsp文件中,您可以使用方括号表示法传递变量。
扩展HashMap
是使冒名贴图易于定义的一种方法 - 简洁到足以使用匿名内部类。
这是一个黑客,但它在过去对我有用。