Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Spring MVC использование @NumberFormat, преобразование request parameters 
V
    Опции темы
carper
Дата 29.4.2010, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 227
Регистрация: 2.3.2005

Репутация: 2
Всего: 8



Раньше работал с custom property editors и горя не знал, теперь перешел на Spring MVC третей версии, захотел попробовать новые плюшки и не понимаю, что надо сделать, чтобы заставить работать преобразователь параметров запроса в нужные JAVA объекты.

web.xml
Код

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!-- Имя файла конфигурации сервлета - диспатчера построено по шаблону имя_сервлета-servlet.xml.  -->
    <load-on-startup>1</load-on-startup>
  </servlet>
    
  <servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>*.html</url-pattern>
  </servlet-mapping>
 
</web-app>


dispatcher-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:p="http://www.springframework.org/schema/p"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans 
                           http://www.springframework.org/schema/beans/spring-beans.xsd
                           http://www.springframework.org/schema/context 
                           http://www.springframework.org/schema/context/spring-context.xsd
                           http://www.springframework.org/schema/mvc
                           http://www.springframework.org/schema/mvc/spring-mvc.xsd">
 
    <mvc:interceptors>
      <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
         <property name="paramName" value="locale" />
      </bean>
    </mvc:interceptors>
     
   <mvc:annotation-driven />
   <context:component-scan base-package="webcnt" ></context:component-scan>
   
</beans>


Код единственного контроллера
Код

package webcnt;

import java.util.Locale;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
public class SimpleController {
    
    @RequestMapping("/form.html")
  public String goToForm() {
    return "/WEB-INF/form.jsp";
  }
    
    @RequestMapping("/result.html")
  public String justToTest(@RequestParam("doubleParam") Double dbl, Model model, Locale locale) {
        model.addAttribute("doubleVal", dbl);
        model.addAttribute("lang", locale.getLanguage());
    return "/WEB-INF/result.jsp";
  }
}


form.jsp
Код

<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
  </head>
  
  <body>
    <form action="result.html">
    Enter DOUBLE: <input type="text" name="doubleParam">
    <input type="submit">
    </form>
  </body>
</html>



Ну, и до кучи код result.jsp
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
  </head>
  
  <body>
    Double = ${doubleVal} <br>
    Language = ${lang}
  </body>
</html>

ЛОКАЛЬ РУССКАЯ!

Вопрос элементарный: что надо сделать в методе 
public String justToTest(@RequestParam("doubleParam") Double dbl ...
чтобы параметр формы можно было передавать с использованием десятичного разделителя, а не точки?

Т.е. 123.34 работает.
       123,34 выдает ошибку 
java.lang.NumberFormatException:

Начало стека:
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1224)
    at java.lang.Double.valueOf(Double.java:475)
    at org.springframework.util.NumberUtils.parseNumber


Нет, очевидно что тут надо что-то прописать, но что?

Так не работает.
public String justToTest(@NumberFormat(pattern="#,##") @RequestParam("doubleParam") Double dbl


Я МОГУ использовать старый способ с глобальным биндингом Double.class на свой custom editor, или использовать аннотацию  @InitBinder и все заработает.

Но в Spring так расхваливаются новые, типизированные, ковертеры и  форматтеры (последние, насколько я понял, именно для учета пользовательской локали), что захотелось попробовать, но что-то запутался.

PM MAIL   Вверх
carper
Дата 30.4.2010, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 227
Регистрация: 2.3.2005

Репутация: 2
Всего: 8



Проблема решена, спасибо.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.1027 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.