Search code examples
javascriptspring-mvclocalejquery-ui-datepicker

Jquery datepicker and Spring MVC internationalization


Good day folks. Please help me. I have Jquery datepicker:

$.datepicker.setDefaults($.datepicker.regional["ru"]);

                     $("#dateinput").datepicker({
                            dateFormat: "yy-mm-dd",
                            beforeShowDay: beforeShowDayHandler,
                            showOn: 'both',
                            onClose: function (dateText, inst) {
                                $(this).attr("disabled", false);
                            },
                            beforeShow: function (input, inst) {
                                $(this).attr("disabled", true);
                            }

                        });


function beforeShowDayHandler(date) {
                            if (self.SelectedDayValue != -1) {
                                if (date.getDate() != 1) {
                                    return [false, '', 'selected'];
                                }
                            }
                            return [true, ''];
                        }

                         jQuery(function ($) {

Presently I have locale on russian. How can I take locale parameter for my date picker on jsp age.

My jsp page:

   <head>

    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

    <title><spring:message code="label.input.head" var="headTitle"/></title>

    <script type="text/javascript" src="resources/jsFiles/jquery-1.10.2.min.js"></script>

    <script type="text/javascript" src="resources/jsFiles/select2.js"></script>
    <link rel="stylesheet" href="resources/cssFiles/select2.css"/>
    <script type="text/javascript" src="resources/jsFiles/select2_e.js"></script>
    <link rel="stylesheet" href="resources/cssFiles/inputStyle.css"/>

    <script type="text/javascript" src="resources/jsFiles/jquery-ui.js"></script>
    <script type="text/javascript" src="resources/jsFiles/jquery-ui-i18n.js"></script>
    <link rel="stylesheet" href="resources/cssFiles/jquery-ui.css"/>

        <script type="text/javascript">

            $(document).ready(function() {  

                     $.datepicker.setDefaults($.datepicker.regional['<%response.getLocale().getLanguage(); %>']);

                     $("#dateinput").datepicker({
                            dateFormat: "yy-mm-dd",
                            beforeShowDay: beforeShowDayHandler,
                            showOn: 'both',
                            onClose: function (dateText, inst) {
                                $(this).attr("disabled", false);
                            },
                            beforeShow: function (input, inst) {
                                $(this).attr("disabled", true);
                            }

                        });

                        function beforeShowDayHandler(date) {
                            if (self.SelectedDayValue != -1) {
                                if (date.getDate() != 1) {
                                    return [false, '', 'selected'];
                                }
                            }
                            return [true, ''];
                        }

                         jQuery(function ($) {
                                console.log($('.widthclass').select2_e().on('change', function () { }));
                            });              
                    }); 
             </script>

</head>


<body>

//other omitted....

</body>

Spring servlet config locale:

<!-- Change my local over url variable lang. Example: ?lang=en -->
<interceptors>
    <beans:bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
         <beans:property name="paramName" value="lang"/>
    </beans:bean>
</interceptors>

I hope this going to be enough information. I want when user change locale it will change datepicker locale automatically too. Thank you


Solution

  • Try to use request interceptor to populate model with locale:

    public class PagePopulationInterceptor extends HandlerInterceptorAdapter {
    
        @Override
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
            if(modelAndView != null) {
                Locale locale = response.getLocale();
                            modelAndView.addObject("currentLocale", locale.getLanguage());
            }
        }
    
    }
    

    Also you need some configuration for interceptor:

    <mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/**"/>
            <bean class="your.package.util.PagePopulationInterceptor" />
        </mvc:interceptor>
    </mvc:interceptors>
    

    After that you can access locale language via ${currentLocale}

    OR

    Easier, but dirtier way is to use scriptlet:

    <%= response.getLocale().getLanguage() %>
    

    You dont need to register intercepter, but it is not clean to have java code in your jsp.