1

(如果我的标题具有误导性/不正确,请提出更具描述性的内容,这是我能想到的最好的)

我已经使用 spring roo 创建了自己的 Web 应用程序,但尚未编辑任何代码。我正在使用 maven 和 jetty 构建和运行 Web 应用程序。当我执行以下一切工作正常。

mvn jetty:run

但是当我打包然后直接运行jar时,我遇到了一些奇怪的问题。

mvn package
java -jar target/dependency/jetty-runner.jar target/*.war

(与“mvn jetty:run-exploded”相同)

主页按原样加载,但是当我单击其中一个导航链接(以创建或列出我的模型)时,我最终将这些错误打印到浏览器(http://localhost:8080/pages/main.jsf)

HTTP ERROR 500

Problem accessing /pages/main.jsf. Reason:

/pages/nameMeaning.xhtml @25,80 value="#{applicationBean.getColumnName(column)}" Error Parsing: #{applicationBean.getColumnName(column)}
Caused by:

javax.faces.view.facelets.TagAttributeException: /pages/nameMeaning.xhtml @25,80 value="#{applicationBean.getColumnName(column)}" Error Parsing: #{applicationBean.getColumnName(column)}
at com.sun.faces.facelets.tag.TagAttributeImpl.getValueExpression(TagAttributeImpl.java:401)
at com.sun.faces.facelets.tag.TagAttributeImpl.getValueExpression(TagAttributeImpl.java:351)
at com.sun.faces.facelets.tag.jsf.ValueHolderRule$DynamicValueExpressionMetadata.applyMetadata(ValueHolderRule.java:129)
at com.sun.faces.facelets.tag.MetadataImpl.applyMetadata(MetadataImpl.java:81)
at javax.faces.view.facelets.MetaTagHandler.setAttributes(MetaTagHandler.java:129)
at javax.faces.view.facelets.DelegatingMetaTagHandler.setAttributes(DelegatingMetaTagHandler.java:102)
at com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.doNewComponentActions(ComponentTagHandlerDelegateImpl.java:398)
at com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:159)
...
Caused by: javax.el.ELException: Error Parsing: #{applicationBean.getColumnName(column)}
at com.sun.el.lang.ExpressionBuilder.createNodeInternal(ExpressionBuilder.java:171)
at com.sun.el.lang.ExpressionBuilder.build(ExpressionBuilder.java:188)
at com.sun.el.lang.ExpressionBuilder.createValueExpression(ExpressionBuilder.java:232)
at com.sun.el.ExpressionFactoryImpl.createValueExpression(ExpressionFactoryImpl.java:92)
at com.sun.faces.facelets.tag.TagAttributeImpl.getValueExpression(TagAttributeImpl.java:385)
... 95 more
Caused by: com.sun.el.parser.ParseException: Encountered "(" at line 1, column 32.
Was expecting one of:

"}" ...
"." ...
"[" ...
">" ...
"gt" ...
"<" ...
"lt" ...
">=" ...
"ge" ...
"<=" ...
"le" ...
"==" ...
"eq" ...
"!=" ...
"ne" ...
"&&" ...
"and" ...
"||" ...
"or" ...
"*" ...
"+" ...
"-" ...
"?" ...
"/" ...
"div" ...
"%" ...
"mod" ...


at com.sun.el.parser.ELParser.generateParseException(ELParser.java:1664)
at com.sun.el.parser.ELParser.jj_consume_token(ELParser.java:1544)
at com.sun.el.parser.ELParser.DeferredExpression(ELParser.java:147)
at com.sun.el.parser.ELParser.CompositeExpression(ELParser.java:74)
at com.sun.el.lang.ExpressionBuilder.createNodeInternal(ExpressionBuilder.java:139)
... 99 more
Caused by:

请在此处查看 pom.xml 文件:http: //pastebin.com/6aPpYP47

4

2 回答 2

2

查看您的pom.xml内容后,很明显您正在运行不同版本的 Jetty。这可能是也可能不是问题的根本原因,但是随着不同版本实现不同版本的 Servlet 容器规范,您可能会发现 Servlet 3.0 功能适用于 Jetty 8 而不适用于 Jetty 7 (这是Servlet 2.5 IIRC)

如果您查看插件配置:

        <plugin>
            <groupId>org.mortbay.jetty</groupId>
            <artifactId>jetty-maven-plugin</artifactId>
            <version>8.1.4.v20120524</version>
            <configuration>
                <webAppConfig>
                    <contextPath>/${project.name}</contextPath>
                </webAppConfig>
            </configuration>
        </plugin>

您会注意到jetty:run将使用 Jetty 8.1.4.v20120524,而当您注入 jetty-runner

       <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-dependency-plugin</artifactId>
          <version>2.3</version>
          <executions>
            <execution>
              <phase>package</phase>
              <goals><goal>copy</goal></goals>
              <configuration>
                <artifactItems>
                  <artifactItem>
                    <groupId>org.mortbay.jetty</groupId>
                    <artifactId>jetty-runner</artifactId>
                    <version>7.4.5.v20110725</version>
                    <destFileName>jetty-runner.jar</destFileName>
                  </artifactItem>
                </artifactItems>
              </configuration>
            </execution>
          </executions>
        </plugin>

java -jar jetty-runner.jar namename.war你一起运行正在使用 Jetty7.4.5.v20110725

正如其他人指出的那样,您使用的是 EL 2.2,这实际上是 Servlet 3.0 功能,所以也许您只需要升级到更新版本的 jetty runner

于 2012-09-07T09:52:40.153 回答
2

我遇到了同样的错误,我解决了。你的问题是错误的。

这是由于表达式解析器。你用过

#{applicationBean.getColumnName(column)}

以你的名字Meaning.xhtml。对于该解析器,它不是有效的 EL。要么你需要改变

#{applicationBean.getColumnName} 

并像传递参数一样

 <f:param name="column" value="#{column}"/>

或者在码头使用 el-api-2.2.jar 解析器。

于 2012-09-04T08:31:48.477 回答