如何可以通过jsp页面上的多个按钮创建多个ajax调用,并且SPring MVC 4中的JSR 303验证工作正常?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (125)

创建一个项目,其中有一个JSP页面的jsp,如附图所示

在jsp页面有两组不同的行,当用户在'DataSet1 textArea'中输入一些数据并点击'Process1'按钮,然后对控制器进行ajax调用,并更新模型以在ResultSet1 textarea中显示结果,下面一行应该会发生同样的情况(可以在这里创建一个新的Ajax调用,而不会干扰第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页面中使用spring form标签是代码片段,
form:form modelAttribute="tokenData" id="formx" action="${formxyz}">

如果我在jsp中不使用表单标签,那么数据绑定和验证(jsr 303)不起作用

2.一旦我使用表单标签,因此当我点击按钮(这是'提交'类型'按钮'类型不工作与数据绑定)然后当我点击任何按钮时,整个表单数据oes到控制器和验证以及所有表单域都会发生其他处理。

有没有什么办法可以通过jsp页面上的多个按钮进行多个ajax调用,JSR 303验证是否正常工作?

提问于
用户回答回答于

Javascript不能调用JSP的任何功能。

JSR 303验证是通过Hibernate验证器(这是JSR 303的实现)在控制器级完成的,而不是由JSP完成的。

所以答案是肯定的。可以从按钮中删除type ='submit'以防止表单提交,并让AJAX将数据发布到控制器。JSR 303将由控制器完成。

扫码关注云+社区

领取腾讯云代金券