我的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文件,但我不确定。任何人都可以提供一些可能发生这种情况的信息吗?
答案 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。