JSF2和GAE:使用Method Expression传递参数

时间:2011-09-14 07:27:18

标签: java google-app-engine jsf-2 el

我按照Google的说明进行了教程,并将el-api-2.2.jarel-impl-2.2.jar添加到WEB-INF/lib。我的测试用例很简单:

<f:view contentType="text/html">
  <h:form id="f1">
    <p:commandLink action="#{parameterBean.test(myString)}">
      <h:outputText value="test"/>
    </p:commandLink>
  </h:form>
</f:view>

操作方法只是public void test(String s) {log.log(Level.INFO, "T: "+s);}。 I日志显示(在页面的初始呈现期间):

javax.faces.view.facelets.TagAttributeException: /jsf/admin/test/parameter.xhtml
@15,62 action="#{parameterBean.test('myString')}" Error Parsing:
#{parameterBean.test('myString')}
...
Caused by: javax.el.ELException: Error Parsing: #{parameterBean.test('myString')}
...
Caused by: org.apache.el.parser.ParseException: Encountered " "(" "( ""
at line 1, column 21.
  Was expecting one of: "}" "." "[" ">" ...

我认为这个错误是GAE特定的,我想知道org.apache.el.parser在游戏中的位置,因为el-libs提供以下包:

  • el-api-2.2.jarjavax.el.*
  • el-impl-2.2.jarcom.sun.el.*

注意在调查此问题期间,我再次检查了Unified Expression Language web site(在教程中给出)并且仅找到el-api-1.1.jarel-impl-1.1.jar作为最新版本。错误保持不变。

2 个答案:

答案 0 :(得分:1)

您可以将`jboss-el.jar'用于此目的

在这里..看一下谷歌关于它的问题

Inability to use EL API 2.2

  

将jboss-el.jar(jboss seam 2)放入lib文件夹

     

并在web.xml中添加此行

<context-param>
    <param-name>com.sun.faces.expressionFactory</param-name>
    <param-value>org.jboss.el.ExpressionFactoryImpl</param-value>
</context-param>

目前无法找到jar的直接链接...我猜需要一些googleing

现在发现了这个.... http://www.seamframework.org/Seam2/Downloads

修改

刚刚注意到它的旧线程......

无论如何,我认为你可以从Download jboss-el.jar

获得正确的答案

答案 1 :(得分:0)

通常,Web应用程序servlet类加载器按以下顺序加载类:

  1. WEB-INF /类
  2. WEB-INF / lib中/ *。罐
  3. 来自servlet容器的其他类。
  4. 不幸的是,出于安全原因,Google在他们的GAE上有一个混乱的非Servlet符合类加载器,并且他们的类优先于您在WEB-INF / lib或您自己的WEB-INF的jar中可能拥有的类/类。

    由于GAE捆绑了EL 1.1,因此谷歌决定更新他们的GAE版本之前一直坚持下去 - 不要屏住呼吸。