在咨询了来自https://github.com/springinpractice/sip04/blob/04/src/main/webapp/WEB-INF/jsp/users/registrationForm.jsp的33-35行代码之后。
<form:errors path="username">
<div class="errorMessage"><form:errors path="username" htmlEscape="false" /></div>
</form:errors>
我保存该文件后,我在MyEclipse的"username"
下的第二行收到错误:
Duplicate local variable messages.
为什么会发生此错误以及如何解决此问题。
但是可以在没有任何错误的情况下呈现jsp页面。
修改
我正在尝试进行表单验证,这是我的代码:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
<h1><spring:message code="user.registration.heading"/></h1>
<form:form action="" modelAttribute="user" method="POST">
<form:errors path="*">
<div><spring:message code="error.global"/></div>
</form:errors>
<!-- for username -->
<div>
<div style="display: inline-block; width: 100px;">
<spring:message code="user.registration.label.username" />
</div>
<div style="display: inline-block;">
<form:input path="username" />
<form:errors path="username">
<div class="errorMessage"><form:errors path="username" htmlEscape="false" /></div>
</form:errors>
</div>
</div>
password: <form:input path="password" /> <form:errors path="password"/><br/>
confirm password: <form:input path="confirmPassword" /> <form:errors path="confirmPassword"/> <br/>
name: <form:input path="name" /> <form:errors path="name"/><br/>
email: <form:input path="email" /> <form:errors path="email"/><br/>
department: <form:input path="department" /> <form:errors path="department"/>. <br/>
<input type="submit" value="Register" />
</form:form>
</body>
</html>
这是该错误的屏幕截图:
答案 0 :(得分:3)
这可能与form:errors
的实施有关。浏览标记库spring-form.tld
会发现标记定义了一个名为messages
的变量:
<!-- <form:errors/> -->
<tag>
<name>errors</name>
<tag-class>org.springframework.web.servlet.tags.form.ErrorsTag</tag-class>
<body-content>JSP</body-content>
<description>Renders field errors in an HTML 'span' tag.</description>
<variable>
<name-given>messages</name-given>
<variable-class>java.util.List</variable-class>
</variable>
我无法找到标记库的原始来源,但您可以在此处进行检查:http://www.docjar.com/docs2web/inside/spring-webmvc-2.5.6.jar/detail/META-INF/spring-form.tld
您将表单:错误嵌套到另一个表单中的事实:错误可能是此消息的来源。
答案 1 :(得分:1)
MyEclipse会在保存后立即编译JSP文件。由此产生的Java代码对于每个应用服务器来说都有点不同,因此很可能会在其中一个服务器上出现错误,而在另一个服务器上却出错。
要了解发生了什么,您需要查看MyEclipse生成的源代码。不过,我不确定文件的创建位置。在工作区中搜索“ registrationForm .java”(可能在Eclipse之外),如果在那里找不到任何内容,请搜索整个硬盘。
然后打开此文件并查看内部。您可能希望将模式放在接近错误的位置,如<% /*XXX*/ %>
。这将显示在生成的Java代码中,以便您可以搜索它。
答案 2 :(得分:0)
似乎是 Eclipse 中的一个错误。嵌套形式:errors 标签有效。显然 Eclipse 对此感到困惑并显示了上述消息。
需要明确的是:嵌套标签工作正常,这不是任何类型的错误。