【问题标题】:Why "Duplicate local variable messages" here?为什么在这里“重复局部变量消息”?
【发布时间】:2014-05-31 08:35:31
【问题描述】:

从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>

这是该错误的屏幕截图:

【问题讨论】:

  • 您在何处/何时获得该异常?
  • 乍一看,您引用的错误消息似乎与您列出的代码完全无关。您将需要提供更多信息:您如何处理代码、何时出现错误、是什么让您认为受影响的代码行确实是您提到的代码行等?
  • 这可能只是 Eclipse 中的警告。如果是这样,请忽略它

标签: java spring jsp


【解决方案1】:

这可能与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

您将 form:errors 嵌套到另一个 form:errors 中的事实可能是此消息的来源。

【讨论】:

    【解决方案2】:

    MyEclipse 会在您保存 JSP 文件后立即对其进行编译。每个应用服务器生成的 Java 代码略有不同,因此很可能其中一个出错,而另一个出错。

    要了解发生了什么,您需要查看 MyEclipse 生成的源代码。不过,我不确定文件是在哪里创建的。在工作区(可能在 Eclipse 之外)中搜索“registrationForm.java”,如果没有找到任何内容,请搜索整个硬盘。

    然后打开这个文件,看看里面。您可能希望在错误附近放置一个模式,例如&lt;% /*XXX*/ %&gt;。这将显示在生成的 Java 代码中,以便您搜索它。

    【讨论】:

      【解决方案3】:

      似乎是 Eclipse 中的一个错误。嵌套形式:错误标签是有效的。显然 Eclipse 对此感到困惑并显示上述消息。

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

      【讨论】:

        猜你喜欢
        • 2022-01-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-18
        • 2012-04-24
        • 1970-01-01
        相关资源
        最近更新 更多