Значение в текстовом поле кнопки Spring On Submit остается неизменным, но выбор тега становится пустым - PullRequest
0 голосов
/ 26 апреля 2018

Это мой PojoClass

package com.LoginPojo;

    import org.hibernate.validator.constraints.NotEmpty;

    public class LoginDeatils {
    public String state;

    public String district;

    public String userName;



    public String getDistrict() {
        return district;
    }

    public void setDistrict(String district) {
        this.district = district;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getState() {
        return state;
    }

    public void setState(String state) {
        this.state = state;
    }



    }

Это мой файл JSP: -

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
        pageEncoding="ISO-8859-1"%>
        <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
            <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Insert title here</title>
    </head>
    <body>
        <form:form action="login" method="POST" commandName="loginBean" accept-charset="UTF-8">  
        <table> 
        <tr>
            <td>Name:<form:input id="userName" name="userName" path="userName" /><br></td>
             <td align="left"><form:errors path="userName" cssClass="error"/></td>
        </tr>

            <tr>
                <td>State: <form:select path="state" items="${stateList}" onchange="addDistrictValues()"  /><br></td>
            </tr>

            <tr>
                <td>District: <form:select path="district"    /><br></td>

            </tr>

        </table>
        <input type="submit" value="login"/>

    </form:form>
        <script type="text/javascript">

            function addDistrictValues() {
                 document.getElementById("userName").value="abchd";    

                 var x = document.getElementById("district");
                 var option = document.createElement("option");
                 option.text = "Raigad";
                 x.add(option); 


            }
            </script>

    </body>
    </html>

Это мой контроллер:

package com.SelectTagPackage;

    import java.util.ArrayList;
    import java.util.List;

    import javax.validation.Valid;

    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.ModelMap;
    import org.springframework.validation.BindingResult;
    import org.springframework.web.bind.annotation.ModelAttribute;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.servlet.ModelAndView;

    import com.LoginPojo.LoginDeatils;
    import com.validator.LoginValidator;

    @Controller
    @RequestMapping("/login")
    public class SelectTagController {

        @Autowired
        LoginValidator loginValidator;

        public LoginValidator getLoginValidator() {
            return loginValidator;
        }

        public void setLoginValidator(LoginValidator loginValidator) {
            this.loginValidator = loginValidator;
        }

        @RequestMapping (method =  RequestMethod.POST)
         public ModelAndView loginPOST(@Valid @ModelAttribute("loginBean")LoginDeatils loginBean , BindingResult bindingResult,ModelMap map) throws Exception 
         {  
            loginValidator.validate(loginBean, bindingResult);
             if (bindingResult.hasErrors()) {           
                 return  new ModelAndView("pageForSelectTag"); //JSP Page Name
                }
             else
             {
                 System.out.println("bindingResult.hasErrors() else block");
           return  new ModelAndView("pageForSelectTag"); //JSP Page Name
             }
         }

        @RequestMapping (method =  RequestMethod.GET)
         public ModelAndView loginGET(@Valid @ModelAttribute("loginBean")LoginDeatils loginBean , BindingResult bindingResult,ModelMap map) throws Exception 
         {


           return  new ModelAndView("pageForSelectTag");
         }


        @ModelAttribute("stateList")
        public List loadprofessionList() {
             List<String> stateList = new ArrayList<String>();
             stateList.add("Maharashtra");
             stateList.add("Keral");

              return stateList;
        }

    }

Это мой класс валидатора: -

package com.validator;

    import org.springframework.stereotype.Component;
    import org.springframework.validation.Errors;
    import org.springframework.validation.ValidationUtils;
    import org.springframework.validation.Validator;

    import com.LoginPojo.LoginDeatils;



    @Component
    public class LoginValidator   implements Validator {

        public boolean supports(Class<?> arg0) {
            // TODO Auto-generated method stub
            return LoginDeatils.class.isAssignableFrom(arg0);
        }

        public void validate(Object arg0, Errors errors) {

            LoginDeatils objLoginDeatils=(LoginDeatils)arg0;

            if(!objLoginDeatils.getUserName().equals("milind"))
            {           
                 ValidationUtils.rejectIfEmptyOrWhitespace(errors, "userName", "error.userName", "userName is requiredddd.");

            }

        }

    }

Моя проблема: - всякий раз, когда я выполняю событие onchange поля со списком состояний, происходит 2 события

<td>State: <form:select path="state" items="${stateList}" onchange="addDistrictValues()"  /><br></td>

1) вызывается метод javascript addDistrictValues.

function addDistrictValues() {
             document.getElementById("userName").value="abchd";    

             var x = document.getElementById("district");
             var option = document.createElement("option");
             option.text = "Raigad";
             x.add(option); 


        }

установка значения abchd в текстовое поле userName: -

document.getElementById("userName").value="abchd";

и значение 2-го Райга будет добавлено в поле выбора района. Код JSP: -

<td>District: <form:select path="district"    /><br></td>

код JavaScript: -

var x = document.getElementById("district");
             var option = document.createElement("option");
             option.text = "Raigad";
             x.add(option);

но всякий раз, когда я нажимаю кнопку отправки, я. е

<input type="submit" value="login"/>

вызывается метод loginPOST контроллера, который внутренне вызывает метод validate и форма загружается снова

@RequestMapping (method =  RequestMethod.POST)
     public ModelAndView loginPOST(@Valid @ModelAttribute("loginBean")LoginDeatils loginBean , BindingResult bindingResult,ModelMap map) throws Exception 
     {  
        loginValidator.validate(loginBean, bindingResult);
         if (bindingResult.hasErrors()) {           
             return  new ModelAndView("pageForSelectTag"); //JSP Page Name
            }
         else
         {
             System.out.println("bindingResult.hasErrors() else block");
       return  new ModelAndView("pageForSelectTag"); //JSP Page Name
         }
     }

но когда метод контроллера с использованием метода validate вызывает текстовое поле, значение «abchd» остается таким же, как в текстовом поле, но значение «Raigad», которое мы добавили через javascript [значение текстового поля, также установленное в javascript], будет исчезать из поля выбора

so why only select box value only getting vanish but textbox value remains unchange , both are setting by javascript.

plz help 

введите описание изображения здесь

введите описание изображения здесь

введите описание изображения здесь

Я искал больше в Google, но я не могу найти правильное решение в любом месте

но когда метод контроллера с использованием метода validate вызывает текстовое поле, значение «abchd» остается таким же, как в текстовом поле, но значение «Raigad», которое мы добавили через javascript [значение текстового поля, также установленное в javascript], будет исчезать из поля выбора

, поэтому, почему В ВЕСНЕ только выбрать значение поля, получая только исчезновение, но значение текстового поля остается неизменным, оба устанавливаются с помощью javascript.

Как только вы увидите прикрепленные изображения, ваши сомнения прояснятся

PLZ Help

1 Ответ

0 голосов
/ 26 апреля 2018

Вы не предоставляете список элементов для элемента управления «округ», например, что вы делаете для элемента управления «штат». Попробуйте это в вашем контроллере:

    @ModelAttribute("districtMap")
    public List loadDistrictMap() {
         Map<String, String> districts new LinkedHashMap<String, String>();
         districts.put("1", "1st District");
         districts.put("2", "2nd District");
         districts.put("3", "Raigad");
         districts.put("n", "Nth District");

          return districts;
    }

А затем в вашей форме JSP:

<td>District: <form:select path="district" items="${districtMap}"    /><br></td>

Карта районов - это просто список примеров, она может быть из базы данных или чего-то еще, но дело в том, что ваш контроллер должен каким-то образом предоставить полный список возможных вариантов районов, чтобы элемент управления select мог связать правильный, основываясь на атрибут path.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...