javaScript가 두 개의 sepparate 목록을 스프링 컨트롤러에 전달할 수있는 방법에 대한 문제가 있습니다. 내 freeMarker 템플릿에서 두 목록 집합을 변경하는 옵션을 만들었습니다.javascript에서 스프링 컨트롤러로 목록을 전달하는 방법
편집 : : 이 두 목록의 렌더링 나는 JQuery와
.sortable("toArray", { key: "id" })
방법의 UI plagin이 발견, 그래서 < 리> 태그 편집을 할
<div class="span5" id="listBox">
<h3>Assigned Servers</h3>
<#if assignedServers?has_content>
<ul id="sortable1" class="connectedSortable">
<#list assignedServers as responsible >
<li class="ui-state-default"
id="${responsible.id}" >${responsible.server_name}</li>
</#list>
</ul>
<#else>
<h4>This employee have no assigned servers yet.</h4>
</#if>
</div>
<div class="span5" id="listBox">
<h3>Available Servers</h3>
<#if availableServers?has_content>
<ul id="sortable2" class="connectedSortable">
<#list availableServers as available >
<li class="ui-state-default"
id="${available.id}" >${available.server_name}</li>
</#list>
</ul>
<#else>
<h4>There is no available servers to assign.</h4>
</#if>
</div>
에 ID 값을 추가 : 나는 JQuery 함수를 변경했다.
<script>
$(function() {
var assigned = "";
var available = "";
$('#sortable1').sortable({
connectWith: '#sortable2',
update: function(event, ui) {
assigned = $(this).sortable("toArray", { key: "id" });
}
}).disableSelection();
$('#sortable2').sortable({
connectWith: '#sortable1',
update: function(event, ui) {
available = $(this).sortable("toArray", { key: "id" });
}
}).disableSelection();
$('#assign').click(function(){
$.ajax({
type: "POST",
url: "/ServerMonitoring/employee_management/serv_assignment/2",
data: JSON.stringify({
serversListModel: {
"assignedServers": assigned,
"availableServers": available
}
}),
datatype: "jsondata",
contentType: 'application/json',
success: function(data) {
alert("Success");
},
error: function (e) {
alert("Error: " + e);
}
});
return false;
});
//debugger
});
</script>
EDITED : 이것은 나의 새로운 봄 컨트롤러 :
@RequestMapping(value = "/{id}", method = RequestMethod.POST)
public @ResponseBody ModelAndView onSubmit(
@ModelAttribute("serversListModel") ServersListModel serversListModel,
@PathVariable("id") Long responsibleId,
BindingResult result,
HttpServletRequest request,
HttpServletResponse response,
SessionStatus status) throws ParseException {
if (!result.hasErrors()) {
if (serversListModel.getAvailableServers() != null) {
for (String id : serversListModel.getAvailableServers()) {
ServerEntity entity = employeeService.getServerById((long)Integer.parseInt(id));
entity.setResponsible(responsibleId);
adminService.updateServer(entity);
}
}
if (serversListModel.getAssignedServers() != null) {
for (String id : serversListModel.getAssignedServers()) {
ServerEntity entity = employeeService.getServerById((long)Integer.parseInt(id));
entity.setResponsible((long) 0);
adminService.updateServer(entity);
}
}
status.setComplete();
return new ModelAndView("redirect:/employee_management/employee_manager");
} else {
response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
return new ModelAndView("redirect:/employee_management/serv_assignment");
}
}
편집 : - : 나는,
{"serversListModel":{"assignedServers":["2","4"],"availableServers":["1","5","3","6","7","8"]}}
그러나 새로운 ServersListModel는 JSON 문자열 통과 지르고 ICAN 자체에 debuging으로 두 바르
public class ServersListModel {
private List<String> assignedServers;
private List<String> availableServers;
...
}
간단한 POJO이야 여전히 그 문자열을 유지하기 위해 관리하지 못했습니다. 내 모델에있는 vars은 디버깅시 NULL을 포함합니다. @ModelAttribute ("serversListModel")에 @RequestBody anotation을 배치하면 Jquery가 BadRequest 오류를 발생시킵니다. 메소드 본문 안에, 내가
String jsonBody = IOUtils.toString(request.getInputStream());
를 호출하면 그것은 requerd ID로 JSON 문자열 객체를 반환합니다, 그래서 난 리키 근처에 답변을 해요.
컨트롤러에서 실수를 찾으십시오. 고맙습니다.
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
: 그럼 난 메이븐 의존성을 추가
public class ServersListModel {
private List<Long> assignedServers;
private List<Long> availableServers;
:
컨트롤러 방법은 어떻게 생겼습니까? – superEb
또한 참조하십시오 : http://stackoverflow.com/questions/18187123/how-to-pass-a-javascript-array-to-the-spring-controller-class – superEb
@superEb, 컨트롤러 코드를 추가했습니다. – Serge