为什么"重复本地变量消息"这里?

时间:2014-04-16 12:50:01

标签: java spring jsp

在咨询了来自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>

这是该错误的屏幕截图:

enter image description here

3 个答案:

答案 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 对此感到困惑并显示了上述消息。

需要明确的是:嵌套标签工作正常,这不是任何类型的错误。