Это мой 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