J'ai un projet web avec internationalisation. C'est assez similaire à http://www.springbyexample.org/examples/basic-webapp-internationalization-jsp-example.html. Il existe des liens permettant de changer les paramètres régionaux dans le décorateur. Ils ajoutent lang param à l'URL actuelle:Internationalisation de printemps: changement de paramètres régionaux
<a href="?lang=en">En</a> | <a href="?lang=ru">Ru</a> </span></td>
À la première fois, l'internationalisation a bien fonctionné. Mais ensuite nous avons trouvé un problème avec certaines formes. Forme:
<form:form action="${pageContext.request.contextPath}/branch/${branchId}/topic.html" modelAttribute="topicDto" method="POST"
onsubmit="this.getAttribute('submitted')"> <!--Block multiple form submissions-->
<table border="2" width="100%">
<tr>
<td width="30%">
<form:label path="topicName"><spring:message code="label.topic"/></form:label>
<form:input path="topicName"/>
<form:errors path="topicName"/>
</td>
</tr>
<tr>
<td height="200">
<form:label path="bodyText"><spring:message code="label.text"/></form:label>
<form:textarea path="bodyText"/>
<form:errors path="bodyText"/>
</td>
</tr>
</table>
<input type="submit" value="<spring:message code="label.addtopic"/>"/>
contrôleur
:
/**
* @see Topic
*/
@Controller
public final class TopicController {
/**
* Method handles newTopic.html GET request and display page for creation new topic
*
* @param branchId {@link org.jtalks.jcommune.model.entity.Branch} id
* @return {@code ModelAndView} object with "newTopic" view, new {@link TopicDto} and branch id
*/
@RequestMapping(value = "/branch/{branchId}/topic/create", method = RequestMethod.GET)
public ModelAndView createPage(@PathVariable("branchId") Long branchId) {
return new ModelAndView("newTopic")
.addObject("topicDto", new TopicDto())
.addObject("branchId", branchId);
}
/**
* This method handles POST requests, it will be always activated when the user pressing "Submit topic"
*
* @param topicDto the object that provides communication between spring form and controller
* @param result {@link BindingResult} object for spring validation
* @param branchId hold the current branchId
* @return {@code ModelAndView} object which will be redirect to forum.html
* @throws org.jtalks.jcommune.service.exceptions.NotFoundException
* when branch not found
*/
@RequestMapping(value = "/branch/{branchId}/topic", method = RequestMethod.POST)
public ModelAndView create(@Valid @ModelAttribute TopicDto topicDto,
BindingResult result,
@PathVariable("branchId") Long branchId) throws NotFoundException {
if (result.hasErrors()) {
return new ModelAndView("newTopic").addObject("branchId", branchId);
} else {
Topic createdTopic = topicService.createTopic(topicDto.getTopicName(), topicDto.getBodyText(),
branchId);
return new ModelAndView("redirect:/branch/" + branchId + "/topic/"
+ createdTopic.getId() + ".html");
}
}
}
Si l'utilisateur afficher le formulaire avec des champs non valides, il verra des messages de validation avant que les champs. S'il changer la langue de la page à ce moment il verra l'erreur:
HTTP Status 405 - Request method 'GET' not supported
type Status report
message Request method 'GET' not supported
description The specified HTTP method is not allowed for the requested resource (Request method 'GET' not supported).
Apache Tomcat/7.0.11
vous pouvez vérifier le problème vous-même à notre serveur de développement http://deploy.jtalks.org/jcommune/index.html par exemple à la page d'inscription http://deploy.jtalks.org/jcommune/registration.html laisser le formulaire vierge et le soumettre. Vous verrez des messages de validation. que changer la langue et soumettre le formulaire une fois de plus pour voir l'erreur spécifiée.
Vous pouvez trouver toutes nos sources ici http://fisheye.jtalks.org/
Merci pour l'explication. Mais que puis-je faire pour éviter cette erreur? Je peux rediriger l'utilisateur à la page principale sur le langage swithcing. Mais ce n'est pas convivial. Peut être que je peux confirmer que GET param quelque part avant le contrôleur? – NullPointer
Je peux aussi définir le cookie javascript spécifique à spirng au lieu de passer GET-param. Cela fonctionne bien, mais je pense que ce n'est pas la meilleure solution. – NullPointer