Можно ли сделать несколько вызовов AJAX из нескольких кнопок на странице JSP, с работающей проверкой JSR 303 в SPring MVC 4? - PullRequest
0 голосов
/ 27 мая 2018

Я новичок в Spring MVC 4 и JQuery, я должен создать проект для моей школы, в котором есть JSP Снимок экрана страницы JSP , как показано на прилагаемом рисунке

На странице jsp есть два набора текстовой области в двух разных строках, когда пользователь вводит некоторые данные в «DataSet1 textArea» и нажимает кнопку «Process1», затем выполняется контроллер ajax, и модель обновляется, чтобы показать результат в ResultSet1.textarea, то же самое должно произойти в строке ниже (может ли здесь быть сделан новый вызов ajax без вмешательства textAreas строки 1?).Мой вопрос заключается в том, какой подход к проектированию лучше всего подходит в этом случае?

Я делюсь своим кодом и проблемами, с которыми я сталкиваюсь при использовании текущего подхода к проектированию: Вот код моего контроллера:

@RequestMapping(value = "/tokenizer", method = RequestMethod.GET)
public String goTokenize(Model model) {
    TokenData data = new TokenData();
    model.addAttribute("tokenData", data);
    return "tokenizer";
}

@RequestMapping(value = "/tokenizer", method = RequestMethod.POST)
public String setTokenize(@Valid @ModelAttribute TokenData tokenData, Errors errors) {
    if (errors.hasErrors()) {
        return "tokenizer";
    }
    return "tokenizer";
}

Вот мой код js, с помощью которого я фиксирую нажатие кнопки

<script type="text/javascript">
	$(document).ready(function() {
		//For button Process
		$('#json').click(function(event) {
			$.ajax({
				type : 'POST',
				contentType : "application/json",
				url : 'tokenizer',
				data : JSON.stringify($("#textarea").val()),
				dataType : 'json',
				success : function(result) {
					$('#result').html(result.text);
				},
				error : function(e) {
					console.log('Error: ' + e)
					alert('Error: ' + e);
				}
			});
		});
		//For button Process2
		$('#json1').click(function(event) {
			
		$.ajax({
				type : 'POST',
				contentType : "application/json",
				url : 'tokenizer',
				data : JSON.stringify($("#textareanew").val()),
				dataType : 'json',
				success : function(result) {
					console.log("success--"+result)
					$('#textarea').val(result.text);
				},
				error : function(e) {
					console.log('Error: ' + e)
					alert('Error: ' + e);
				}
			});
		});
	});
</script>

Вот моя модель Объект

public class TokenData {

@NotEmpty
private String tokenData;
private String resultData;

@NotEmpty
private String tokenDataNew;
public String getTokenDataNew() {
    return tokenDataNew;
}

public void setTokenDataNew(String tokenDataNew) {
    this.tokenDataNew = tokenDataNew;
}

public String getResultDataNew() {
    return resultDataNew;
}

public void setResultDataNew(String resultDataNew) {
    this.resultDataNew = resultDataNew;
}

private String resultDataNew;

public String getResultData() {
    return resultData;
}

public void setResultData(String resultData) {
    this.resultData = resultData;
}

public String getTokenData() {
    return tokenData;
}

public void setTokenData(String tokenData) {
    this.tokenData = tokenData;
}

Проблемы, с которыми я сталкиваюсь:

  1. Я использую тег пружинной формы вНа странице jsp приведен фрагмент кода,

form:form modelAttribute="tokenData" id="formx" action="${formxyz}">
если я не использую тег формы в jsp, то привязка данных и проверка (jsr 303) не работают

2. Поскольку я использую тег формы, следовательно, когда я нажимаюкнопки (которые имеют тип «отправить» как тип «кнопки», не работают с привязкой данных), затем, когда я нажимаю на любую кнопку, все данные формы передаются контроллеру, и для всех полей формы происходит проверка, а также другая обработка.

У меня вопрос, есть ли способ, которым я могу сделать несколько вызовов AJAX от нескольких кнопок на странице JSP, с работающей проверкой JSR 303?

Заранее спасибо за помощь.

1 Ответ

0 голосов
/ 28 мая 2018

В двух словах, Javascript не может вызывать какие-либо функции JSP.

Однако проверка JSR 303 выполняется валидатором Hibernate (это реализация JSR 303) на уровне контроллера, а не JSP.

Итак, ответ ДА.Вы можете просто удалить type = 'submit' из ваших кнопок, чтобы предотвратить отправку формы, и позволить AJAX отправлять данные на ваш контроллер.JSR 303. будет выполняться вашим контроллером.

По вашему «нулевому» вопросу о данных: сначала, пожалуйста, проверьте поле «data» в вашем вызове AJAX.Данные должны быть в формате JSON с точно такой же структурой, что и ваши TokenData.Во-вторых, если вы хотите, чтобы ваш контроллер возвращал данные, а не ModelAndView, вы должны пометить @ResponseBody на уровне метода или @RestController на уровне класса.

Для получения дополнительной информации, пожалуйста, прочитайте: https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html

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