2

我的 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 文件,但我不确定。谁能提供一些信息说明为什么会发生这种情况?

4

1 回答 1

6

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

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

在 JSP 2.0 中,标记处理程序添加了一个新特性,允许它们获取动态属性。为此,您必须在 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 版本 2所有实现的接口:Serializable、IterationTag、JspTag、Tag、TryCatchFinally、EditorAwareTag。

FormTag 版本 3所有实现的接口:Serializable、 DynamicAttributes、IterationTag、JspTag、Tag、TryCatchFinally、EditorAwareTag。

于 2012-11-30T19:02:03.647 回答