JSP标记属性不能多次设置?

时间:2012-05-16 13:25:10

标签: jsp jsp-tags

我有一些带有标签的旧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'");

最后[属性]会覆盖它之前的那些。我还在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

标签的属性不能设置多次。

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

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

4 个答案:

答案 0 :(得分:6)

具有相同名称的多个属性是JSP规范支持的 never 。如果它在Websphere 5上运行,那么这将取决于该服务器版本允许的专有行为,而不是任何其他行为。我认为标签类做的事情就像将值添加到集合或其他类似的东西。

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

答案 1 :(得分:3)

JSP标记是XML元素。并且XML元素不能具有同名的多个属性。恕我直言,您的代码恰好在以前的Websphere版本中偶然起作用,可能是由于对JSP标记的粗略验证和解释。

答案 2 :(得分:0)

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

allowMultipleAttributeValues设置为true

或者将Web容器自定义属性com.ibm.wsspi.jsp.allowMultipleAttributeValues设置为true

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

答案 3 :(得分:0)

我有同样的问题。我在同时使用带有显示标记库标记的struts标记,所以我遇到了这个问题。一旦我选择了一个使用错误就消失了。使用来自两个不同库的相同标签会导致歧义。