2011-02-01 5 views
4

Je suis nouveau avec le ressort 3 et j'ai été bloqué pendant un moment.Spring 3 - Accès aux messages.properties en jsp

Savez-vous comment puis-je accéder à messages.properties à partir d'un fichier jsp. Par exemple, dans le contrôleur, je mis une valeur à mon modèle:

model.setError("user.not.found") 

messages.properties:

user.not.found=Sorry, we haven't been able to found this user 

et dans le jsp, je veux être en mesure de le faire

${model.error} 

et affichant "désolé ...". Cependant, je reçois toujours "user.not.found" même si cela fonctionne correctement lorsque j'utilise @Valid ..., bindingResult et ensuite dans le formulaire.

Merci,

Répondre

13

Utilisez <spring:message> du spring taglib:

<spring:message code = "${model.error}" /> 

où taglib est importé comme

<%@ taglib prefix = "spring" uri = "http://www.springframework.org/tags" %> 
+1

Et voici la référence taglib: http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/spring.tld.html –

+0

merci, ça marche! – tsunade21

+0

Est-il possible d'obtenir un message de messageSource sans utiliser de balises, je veux dire une expression comme $ {msg ['code']}? – marioosh

0

Vous pouvez utiliser ${msg.getMessage('MSG_CODE')} en JSP, si vous mettez résolveur message dans la Modèle (ou ModelAndView) dans le contrôleur.

// In a controller class 

... 

@Autowired 
private MessageResolver messageResolver; 

... 

@RequestMapping(value="/edit") 
public ModelAndView getSomething(MyFormData formData, 
           ModelAndView mv) { 
    mv.setViewName("TARGET_VIEW"); 

    // Do some controller things... 

    Map<String, Object> map = new HashMap<String, Object>(); 
    map.put("msg", messageResolver); 

    mv.addAllObjects(map); 

    return mv; 
} 

Et dans JSP, vous pouvez utiliser ${msg.getMessage('MESSAGE_CODE')}. Le gros avantage de cette approche est que vous pouvez utiliser Message même à l'intérieur des étiquettes de forme de printemps. <spring:message code="MESSAGE_CODE" /> ne peut pas être utilisé à l'intérieur des étiquettes de forme de printemps.

<form:select path="domainObj1.property1" cssClass="form-control"> 
    <form:option value="" label="--${msg.getMessage('L01006')}--" /> 
    <form:options items="${selection.selectionList}" itemValue="code" itemLabel="codeVal"/> 
</form:select> 

Il est encore mieux que vous mettre en œuvre une coutume Interceptor (en particulier, la méthode postHandle) pour mettre le messageResolver dans le ModelAndView plutôt que de vous écrire le même code dans tous les contrôleurs.

Questions connexes