#ajax #spring #jsp #spring-mvc
#ajax #spring #jsp #spring-mvc
Вопрос:
Я использую spring boot, maven 3.2.5. Я работаю над простым веб-приложением maven, используя spring boot, следуя шаблону mvc. я пытаюсь вызвать метод контроллера из jsp, предъявляя иск ajax.
это мой метод jsp javascript, который вызывает вызов ajax для вызова метода контроллера.
function listExistingUser()
{
alert("listExistingUser");
$.ajax({
type : "GET",
url : '${home}/loginController/listExistingUser',
dataType : "json",
crossDomain:true,
success : function(data) {
//console.log(data);
//alert(data.toString());
checkValidUser(data);
},
error : function(data) {
}
});
}
Ниже приведен мой класс контроллера.
@Controller
@RequestMapping("/loginController")
public class LoginController {
@Autowired
LoginService loginService;
@RequestMapping(value = "/listExistingUser", method = RequestMethod.GET)
@ResponseBody
public Object getAuthentication(@ModelAttribute("studentId") int studentId,
HttpServletRequest request, HttpServletResponse response)
{
System.out.println("listExistingUser is called in controller");
}
}
когда я запускаю свое приложение, я могу получить доступ к login.jsp по указанному ниже URL
http://localhost:9090/seperation-management/pages/login.jsp
когда я нажимаю кнопку отправки, также вызывается метод javascript на странице jsp, alert("listExistingUser");
но я не могу вызвать свой метод контроллера.
где я допускаю ошибку. кто-нибудь может мне помочь.
Ответ №1:
в метод contoller необходимо внести некоторые изменения
@RequestMapping(value = "/listExistingUser", method = RequestMethod.GET)
@ResponseBody
public ResponseEntity<Object> getAuthentication(){
System.out.println("listExistingUser is called in controller");
return new ResponseEntity<Object>(object,HttpStatus.OK);
}
вам не нужно иметь @modelAttribute
аннотацию, поскольку вы не связываете какой-либо объект с запросом. и хорошей практикой является возврат ResponseEntity
вместо возврата Object
.
если вам нужно получить идентификатор из входящего запроса, подобного этому siteName/listExistingUser/1
, используйте этот метод.
@RequestMapping(value = "/listExistingUser/{id}", method = RequestMethod.GET)
@ResponseBody
public ResponseEntity<Object> getAuthentication(@PathVariable("id") int id){}
если вы хотите получать значения из URL-адреса, подобного этому
siteName/listExistingUser?id=1
, используйте вместо этого этот метод.
@RequestMapping(value = "/listExistingUser", method = RequestMethod.GET)
@ResponseBody
public ResponseEntity<Object> getAuthentication(@RequestParam("id") int id){}
Ответ №2:
Этот пример работает в моем приложении:
JSP:
<script type="text/javascript" charset="utf-8">
function getDesc() {
$.getJSON("desclist.json", {
sel1Id : $('select#COMPSNT_NM').val()
}, function(data) {
var html = '';
var len = data.length;
for (var i = 0; i < len; i ) {
html = '<option value="' data[i] '">'
data[i] '</option>';
}
$('select#COMPSNT_DS').html(html);
});
}
$(document).ready(function() {
$('#COMPSNT_NM').change(function() {
getDesc();
});
});
</script>
Контроллер:
@RequestMapping(value = "desclist.json")
@ResponseStatus(HttpStatus.OK)
public @ResponseBody List<String> sectionList(@RequestParam(value = "sel1Id", required = true) String sel1Id,
ModelMap modelMap) {
List<PARAM_SEQ_2> list = new ArrayList<>();
List<String> list2 = new ArrayList<>();
list = paramSeq2Service.findByField2(sel1Id);
for (PARAM_SEQ_2 prm : list) {
list2.add(prm.getCOMPSNT_DS());
}
return list2;
}