6
<s:select
  name="PenaltyPercentage"
  id="PenaltyPercentageId"
  list="#{'7.5%':'7.5%', '15.0%':'15.0%'}" <!-- shows error in this line -->
  headerKey=""
  headerValue="Please Select"
  emptyOption="false">
</s:select>

错误消息如下

Encountered ":" at line 1, column 9.
Was expecting one of:
"}" ...
"." ...
"]" ...
">" ...
"<" ...
4

1 回答 1

6

Netbeans 7 使用现在使用# 字符的JSP EL 2.1。

对我来说(Netbeans IDE 7.0 RC1)它编译得很好并且可以工作,尽管该行被标记为错误。如果 glassfish 不会执行 jsp,则以下链接显示如何在 JSP 2.1 容器中禁用 JSP EL(以下链接的底部)。

http://struts.apache.org/2.0.14/docs/ognl.html

可能此时最简单的解决方案就是添加地图的类:

#@java.util.LinkedHashMap@{ "foo" : "foo value", "bar" : "bar value" } 

在这个线程中找到: http: //struts.1045723.n5.nabble.com/s2-JSF-JSP-EL-vs-OGNL-EL-td3528303.html

有关 JSP EL 2.1 的信息,请参阅:http: //jcp.org/aboutJava/communityprocess/final/jsr245/index.html


您可能只是在展示问题,但可以肯定的是,如果您提供列表而不是地图,则返回到服务器的值将与显示的值相同。所以下面会产生相同的选择框并且不会产生错误:

<s:select
  list="{'7.5%','15.0%'}" <!-- does not show error -->
  headerValue="Please Select"
  emptyOption="false">
</s:select>

我花了一点时间看看是否可以在 Netbeans 7 中更改 JSP EL 版本而没有成功,还试图找到一种方法来禁用 JSP EL 错误检查但没有成功。因此,如果您必须在 JSP 中使用 OGNL 映射,请禁用 JSP EL(这对某些人来说不是一个有吸引力的选项)或显式声明该映射,如图所示。

于 2011-05-11T22:45:47.153 回答