6

我有一些带有标签的旧 JSP 文件,例如

<mytag:editbox name="SEL_1" param="onclick='clickit();" param="size='4'" />.

这些 JSP 在 Websphere 5.0 中运行得非常好。当我将它移入 Websphere 8.0 时,出现了问题。JSP编译的java源码是这样的:

editbox.setName("SEL_1");
editbox.setParam("size='4'");  //replaced by the last one
editbox.setParam("size='4'");

最后一个 [attributes] 覆盖它之前的那些。我还在 Websphere 6.0 和 Tomcat 中测试了 JSP。WAS6 和 8.0 一样,Tomcat 说:

org.apache.jasper.JasperException: /index.jsp (line: 17, column: 20) Attribute qualified names must be unique within an element

tag 的属性不能设置多次。

这是 JSP 2.0+ 规范的要求吗?(我认为 WAS5.0 中的 JSP 容器是 JSP 1.2 。)

我可以将两个 param 属性合并为一个来纠正问题,但是如何在不更改 JSP 源的情况下获得正确的结果呢?

4

4 回答 4

6

JSP 规范从不支持具有多个同名的属性。如果它在 Websphere 5 上工作,那么这将取决于该服务器版本允许的专有行为,而不是任何其他版本。我认为标签类会做一些事情,比如将值添加到集合中,或者类似的事情。

您需要通过使用分隔字符串或使用嵌套标签来重构标签以符合规范。

于 2012-05-16T13:35:47.197 回答
3

JSP 标记是 XML 元素。并且一个 XML 元素不能有多个同名的属性。恕我直言,您的代码碰巧在以前的 Websphere 版本中偶然工作,可能是由于对 JSP 标记的草率验证和解释。

于 2012-05-16T13:36:02.023 回答
0

要与 WAS 8 具有相同的行为,您可以在应用程序部署描述符 ( ibm-ext-web.xmi) 中包含此 JSP 属性:

allowMultipleAttributeValues set to true.

Or set the Web container custom property com.ibm.wsspi.jsp.allowMultipleAttributeValues to true.

Source: http://www-01.ibm.com/support/docview.wss?uid=swg1PM65454

于 2014-11-24T21:04:27.293 回答
0

I had the same issue. I was using struts tags with Display tag library tags at the same time, so I faced this issue. Once I chose one to use the error went away. Using same tags from two different libraries causes ambiguity.

于 2017-05-12T22:13:35.240 回答