복붙노트

[SPRING] MessageSource에서 메시지를 찾을 수 없습니다.

SPRING

MessageSource에서 메시지를 찾을 수 없습니다.

하나의 간단한 스프링 애플리케이션을 실행하려고하는데 다음과 같은 예외가 발생합니다.

내 contact.jsp 파일 :

<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%>
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<%@taglib uri="http://java.sun.com/jstl/core_rt" prefix="c" %>
<%@ page isELIgnored="false" %>

<html>
<head>
    <title>Spring 3 MVC Series - Contact Manager | viralpatel.net</title>
</head>
<body>

<h2>Contact Manager</h2>

<form:form method="post" action="add.html" commandName="contact">

    <table>
    <tr>
        <td><form:label path="firstname"><spring:message code="label.firstname"/></form:label></td>
        <td><form:input path="firstname" /></td>
    </tr>
    <tr>
        <td><form:label path="lastname"><spring:message code="label.lastname"/></form:label></td>
        <td><form:input path="lastname" /></td>
    </tr>
    <tr>
        <td><form:label path="email"><spring:message code="label.email"/></form:label></td>
        <td><form:input path="email" /></td>
    </tr>
    <tr>
        <td><form:label path="telephone"><spring:message code="label.telephone"/></form:label></td>
        <td><form:input path="telephone" /></td>
    </tr>
    <tr>
        <td colspan="2">
            <input type="submit" value="<spring:message code="label.addcontact"/>"/>
        </td>
    </tr>
</table>
</form:form>

<h3>Contacts</h3>
<c:if  test="${!empty contactList}">
<table class="data">
<tr>
    <th>Name</th>
    <th>Email</th>
    <th>Telephone</th>
    <th>&nbsp;</th>
</tr>
<c:forEach items="${contactList}" var="contact">
    <tr>
        <td>${contact.lastname}, ${contact.firstname} </td>
        <td>${contact.email}</td>
        <td>${contact.telephone}</td>
        <td><a href="delete/${contact.id}">delete</a></td>
    </tr>
</c:forEach>
</table>
</c:if>

</body>
</html>

내 spring-servlet.xml 파일

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:jee="http://www.springframework.org/schema/jee" xmlns:lang="http://www.springframework.org/schema/lang"
    xmlns:p="http://www.springframework.org/schema/p" xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:util="http://www.springframework.org/schema/util"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd
        http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">

    <context:annotation-config />
    <context:component-scan base-package="net.viralpatel.contact" />

    <bean id="jspViewResolver"
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass"
            value="org.springframework.web.servlet.view.JstlView" />
        <property name="prefix" value="/WEB-INF/jsp/" />
        <property name="suffix" value=".jsp" />
    </bean>

    <bean id="messageSource"
        class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
        <property name="basename" value="WEB-INF/messages" />
        <property name="defaultEncoding" value="UTF-8" />
    </bean>



    <bean id="propertyConfigurer"
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
        p:location="/WEB-INF/jdbc.properties" />

<!--    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" -->
<!--        destroy-method="close" p:driverClassName="${jdbc.driverClassName}" -->
<!--        p:url="${jdbc.databaseurl}" p:username="${jdbc.username}" p:password="${jdbc.password}" /> -->

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
        destroy-method="close" p:driverClassName="com.mysql.jdbc.Driver"
        p:url="jdbc:mysql://localhost:3306/ContactManager" p:username="root" p:password="12345" />


    <bean id="sessionFactory"
        class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="configLocation">
            <value>classpath:hibernate.cfg.xml</value>
        </property>
        <property name="configurationClass">
            <value>org.hibernate.cfg.AnnotationConfiguration</value>
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">${jdbc.dialect}</prop>
                <prop key="hibernate.show_sql">true</prop>
            </props>
        </property>
    </bean>

    <tx:annotation-driven />
    <bean id="transactionManager"
        class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>

</beans>

나는 URL을 때리고있다 :

localhost : 8080 / MavenWeb-0.0.1 / index

및 내 서버 stacktrace :

SEVERE: No message found under code 'label.firstname' for locale 'en_US'.
javax.servlet.jsp.JspTagException: No message found under code 'label.firstname' for locale 'en_US'.
    at org.springframework.web.servlet.tags.MessageTag.doStartTagInternal(MessageTag.java:184)
    at org.springframework.web.servlet.tags.RequestContextAwareTag.doStartTag(RequestContextAwareTag.java:79)
    at org.apache.jsp.WEB_002dINF.jsp.contact_jsp._jspx_meth_spring_005fmessage_005f0(contact_jsp.java:252)
    at org.apache.jsp.WEB_002dINF.jsp.contact_jsp._jspx_meth_form_005flabel_005f0(contact_jsp.java:219)
    at org.apache.jsp.WEB_002dINF.jsp.contact_jsp._jspx_meth_form_005fform_005f0(contact_jsp.java:138)
    at org.apache.jsp.WEB_002dINF.jsp.contact_jsp._jspService(contact_jsp.java:91)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:419)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:389)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:333)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:684)
    at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:471)
    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:402)
    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:329)
    at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:238)
    at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:250)
    at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1047)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:817)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:563)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:403)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:301)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:162)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:309)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:662)

문제를 해결할 단계 :

그것은 내 문제를 해결로 작동합니다.

<bean id="messageSource"
    class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="basename" value="classpath:messages" />
    <property name="defaultEncoding" value="UTF-8" />
</bean>

해결법

  1. ==============================

    1.MessageSource 빈 정의는 다소 혼란 스럽다. 일반적으로 basename은 메시지 분석에 사용할 파일 이름의 접두사 (빼기 .properties)이며, Spring 및 JDK ResourceBundle 클래스는 언어 및 / 또는 국가 약어를 추가합니다.

    MessageSource 빈 정의는 다소 혼란 스럽다. 일반적으로 basename은 메시지 분석에 사용할 파일 이름의 접두사 (빼기 .properties)이며, Spring 및 JDK ResourceBundle 클래스는 언어 및 / 또는 국가 약어를 추가합니다.

    <bean id="messageSource"
        class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
        <property name="basename" value="WEB-INF/message_en.properties/Message" />
        <property name="defaultEncoding" value="UTF-8" />
    </bean>
    

    예를 들어, messages.properties, messages_es.properties, messages_de.properties와 같은 리소스 파일을 사용하려는 경우 WEB-INF / 메시지의 기본 이름을 지정합니다.

    메시지 번들 파일의 실제 이름은 무엇입니까?

  2. ==============================

    2.나는 같은 문제를 안고 있었다. 해결책은 다음과 같다.

    나는 같은 문제를 안고 있었다. 해결책은 다음과 같다.

    여러분은 .properties없이 messages.properties 파일과 동일한 이름을 속성에 넣었다는 것을 알 수 있습니다.

    그게 문제 였어 ^^

  3. ==============================

    3."resources"폴더를 "Web Deployment Assembly"에 추가해야합니다. 그런 다음 "classpath : messages"를 "messages"로 바꿉니다. 마지막으로해야 할 일은 프로젝트를 정리하는 것입니다.

    "resources"폴더를 "Web Deployment Assembly"에 추가해야합니다. 그런 다음 "classpath : messages"를 "messages"로 바꿉니다. 마지막으로해야 할 일은 프로젝트를 정리하는 것입니다.

    예:

    <bean id="messageSource"
        class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
        <property name="basename" value="messages" />
        <property name="defaultEncoding" value="UTF-8"/>
    </bean>
    

    그것은 충분할 것이다. :)

  4. ==============================

    4.중요한 고려 사항은 자동 재로드를 위해 특성 파일이 클래스 경로에 없어야한다는 것입니다. 서버는 대개 속성을 캐시하므로 클래스 폴더에 있으면 정말 효과적이지 않습니다. per Spring docs, classpath : messages의 경우 -1 이외의 cachedSeconds는 아무런 효과가 없습니다.

    중요한 고려 사항은 자동 재로드를 위해 특성 파일이 클래스 경로에 없어야한다는 것입니다. 서버는 대개 속성을 캐시하므로 클래스 폴더에 있으면 정말 효과적이지 않습니다. per Spring docs, classpath : messages의 경우 -1 이외의 cachedSeconds는 아무런 효과가 없습니다.

  5. ==============================

    5.안하는 것보다 늦게하는 것이 낫다. 나는 똑같은 문제가 있었다. 여기 내가 어떻게 해결 했는가. 내 파일 이름 :

    안하는 것보다 늦게하는 것이 낫다. 나는 똑같은 문제가 있었다. 여기 내가 어떻게 해결 했는가. 내 파일 이름 :

    왜냐하면 그것의 프랑스어 스프링 튜토리얼. 그러나 나는 네덜란드에 살고있다. 그래서 나는 그것의 이름을 바꾸려고 노력했다.

    작동합니다. 이것이 장기적인 해결책 일지는 모르지만 우리는 알 수 있습니다.

  6. ==============================

    6.문제를 직면하게 될 다른 사람에게.

    문제를 직면하게 될 다른 사람에게.

    모든 답변 외에도 Spring Framework에서 .jsp 파일을 처리하도록하십시오. .jsp에 직접 액세스하면 스프링 태그가 처리되지 않고 똑같은 오류가 표시됩니다. 간단히 말해 컨트롤러를 통해 .jsp를 노출하십시오.

  7. ==============================

    7.나는 똑같은 문제가 있었지만 간단히 messages_properties로두고 문제를 해결했다.

    나는 똑같은 문제가 있었지만 간단히 messages_properties로두고 문제를 해결했다.

  8. from https://stackoverflow.com/questions/6748939/cannot-locate-message-in-messagesource by cc-by-sa and MIT license