[SPRING] Javascript에서 모델 속성에 액세스하는 방법
SPRINGJavascript에서 모델 속성에 액세스하는 방법
Javascript에서 모델 속성에 액세스하려고합니다. 다음 코드를 사용합니다.
model.addAttribute("data", responseDTO);
내 DTO 클래스 :
public class ResponseDTO {
private List<ObjectError> errors;
private Boolean actionPassed;
private String dataRequestName;
// and setter getter for all fields
}
필자는 다음을 사용하여 DTO에 액세스하려고했습니다.
var data = "${data}";
그러나 대신 응답 DTO 문자열 표현을 제공합니다 (예 : com.req.dto.ResponseDTO@115f4ea). 성공적으로 DTO 내부의 필드에 액세스 할 수 있습니다.
var data = "${data.actionPassed}";
그러나 이것은 ObjectError의 List이므로 DTO 내부의 errors 속성에서는 작동하지 않습니다. Javascript에서 complete responseDTO 객체를 얻으려면 어떻게해야합니까?
감사!
편집하다 :
처음에는 jquery.post를 사용했습니다.
$.post('ajax/test.html', function(data) {
// Here I was able to retrieve every attribute even list of ObjectError.
});
이제 Ajax를 제거하고 비 아약스 방식으로 변환하려고합니다. (어쩔 수없는 이유로) 그래서 정상적인 양식을 제출하고 같은 양식을 다시로드하고 Javascript에서 데이터 모델 속성을로드하려고하므로 나머지 코드를 그대로 유지하려고합니다. 그것은 Jquery 게시물을 사용하여 할 수있는 것처럼 그것은 자바 스크립트에서 얻을 수 있는지 궁금 해서요?
편집 2 :
나는 시도했다 (당신에게 @ 제안을위한 감사)
JSONObject jsonObject =JSONObject.fromObject(responseDTO);
String jsonString = jsonObject.toString();
model.addAttribute("data",jsonString);
자바 스크립트
var data = eval('('+ ${dataJson} +')'); // Getting error on this line
alert(data.actionPassed);
하지만 오류가 발생하고 경고가 표시되지 않습니다. 오류 :
해결법
-
==============================
1.우선, 자바 객체를 자바 스크립트 객체로 직접 변환 할 수있는 방법이 없습니다. 서로 관련이 없기 때문입니다. 하나는 서버 측 언어이고 다른 하나는 클라이언트 측 언어입니다. 따라서이 목표를 달성하려면 전환을해야합니다. 두 가지 옵션이 있다고 생각합니다.
우선, 자바 객체를 자바 스크립트 객체로 직접 변환 할 수있는 방법이 없습니다. 서로 관련이 없기 때문입니다. 하나는 서버 측 언어이고 다른 하나는 클라이언트 측 언어입니다. 따라서이 목표를 달성하려면 전환을해야합니다. 두 가지 옵션이 있다고 생각합니다.
옵션 # 1의 경우 자바 객체로 JSON 문자열을 생성하려면 라이브러리를 사용해야합니다. 이 하나의 JSON-lib를 사용할 수 있습니다. 예 :
JSONObject jsonObject = JSONObject.fromObject( responseDTO ); /* jsonStr is something like below, "errors" represents the List<ObjectError> I don't know what's in ObjectError, errorName is just an example property. { "dataRequestName":"request1", "actionPassed":true, "errors":[{"errorName":"error"},{"errorName":"unknown error"}] } */ String jsonStr = jsonObject.toString(); model.addAttribute("dataJson", jsonStr); /*In JSP, get the corresponding javascript object by eval the json string directly.*/ <script> var data = eval('('+'${dataJson}'+')'); </script>
옵션 # 2의 경우,
//Pass java object as you do now model.addAttribute("data",responseDTO); //In JSP, include jstl taglib to help accessing List. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <script> var errorArr = [], errorObj; <c:forEach var="error" items="${data.errors}"> errorObj = { errorName: '${error.errorName}' }; errorArr.push(errorObj); </c:forEach> //Populate the corresponding javascript object. var data = { dataRequestName: '${data.dataRequestName}', actionPassed: ${data.actionPassed}, errors: errorArr }; </script>
알 수 있듯이 옵션 # 2는 복잡하고 Java 객체가 단순하고 옵션 # 1이 훨씬 쉽고 유지하기 쉬운 경우에만 유용합니다.
-
==============================
2.그래서 Grant의 첫 번째 옵션 인 객체 목록과 유사한 솔루션을 구현했지만 Gson 라이브러리를 사용하여 객체를 JSON 문자열로 변환 한 다음 JSON.parse ()를 사용하여 javascript 객체로 변환했습니다.
그래서 Grant의 첫 번째 옵션 인 객체 목록과 유사한 솔루션을 구현했지만 Gson 라이브러리를 사용하여 객체를 JSON 문자열로 변환 한 다음 JSON.parse ()를 사용하여 javascript 객체로 변환했습니다.
서버에서 :
List<CustomObject> foo = database.getCustomObjects(); model.addAttribute("foo", new Gson().toJson(foo));
자바 스크립트 페이지에서 :
var customObjectList = JSON.parse('${foo}'); console.log(customObjectList);
모델 객체 foo를 참조 할 때 '$ {foo}'문자열로 사용한다는 점에 유의하십시오. 문자열 밖에서 참조하기 때문에 오류가 발생한다고 생각합니다. 올바른 코드는 다음과 같습니다.
var data = eval('('+ '${dataJson}' +')');
-
==============================
3.매우 간단하다.
매우 간단하다.
in your spring controller model.addAttribute("attributeName", "attributeValue"); in the script <script type="text/javascript"> $(window).on('load', function () { var springAttribute= '${attributeName}'; alert(springAttribute); </script>
from https://stackoverflow.com/questions/9361977/how-to-access-model-attribute-in-javascript by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring MVC에서 컨트롤러와 액션 메소드를 기반으로 URL을 생성하려면 어떻게해야합니까? (0) | 2019.02.17 |
---|---|
[SPRING] Spring 요청 범위 빈 (0) | 2019.02.17 |
[SPRING] 봄 보안, 후행 슬래시 및 URL의 점 (0) | 2019.02.17 |
[SPRING] UTF-8 URL 디코드 / 인코딩 (0) | 2019.02.17 |
[SPRING] Java에서 정적 메서드를 쉽게 조롱 할 수있는 방법 (jUnit4) (0) | 2019.02.17 |