form:form标签声明它接受动态属性但不实现所需的接口

时间:2012-11-30 15:40:26

标签: java spring jsp jsp-tags

我的JSP中有这个代码:

<form:form commandName="Recipient" name="mailForm" 
           action="MailSuccess.jsp" method="get">
    <form:input path="toAddress"/>
    <form:input path="subject"/>
    <input type="submit" value="Send"/>
</form:form>

我收到此错误:

  

org.apache.jasper.JasperException:/SendMail.jsp(12,0)form:form标签声明它接受动态属性但没有实现所需的接口

我的猜测是我错过了一些JAR文件,但我不确定。任何人都可以提供一些可能发生这种情况的信息吗?

1 个答案:

答案 0 :(得分:6)

你确实错过了一些JAR文件,或者你有它们但版本错误(我认为包含标签处理程序的Spring jar有错误,甚至可能错误地包含在你的应用程序中jsp-api.jar) 。

您从servlet容器中获取该异常,因为它认为Spring Form标记处理程序无效。

在JSP 2.0中,为标记处理程序添加了一个新功能,允许它们take dynamic attributes。为此,您必须在TLD文件中使用<dynamic-attributes>true</dynamic-attributes>声明指定它,并且您的标记处理程序类必须实现DynamicAttributes接口。

从例外情况来看,您的应用程序可能会加载一个JSP 2.0 Spring TLD文件以及包含org.springframework.web.servlet.tags.form.FormTag类的旧版JAR。

您没有提到您正在使用的Spring版本。是3吗?也许它加载了Spring 2 JAR,如果您使用Maven来获取应用程序依赖项,则可能会发生这种情况。这是有道理的,因为版本之间的类发生了变化,所以这将是我要检查的第一件事

FormTag version 2所有已实现的接口:Serializable,IterationTag,JspTag,Tag,TryCatchFinally,EditorAwareTag。

FormTag version 3 :所有已实施的界面:可序列化, DynamicAttributes ,IterationTag,JspTag,Tag,TryCatchFinally,EditorAwareTag。