Language/Java, Jsp

JSP The method ...(String) is undefined for the type ...

__bo0o_ 2022. 1. 21. 00:40
The method get(String) is undefined for the type Object

The method getJSONObject(String) is undefined for the type JSONObject​

 

JSP에서 다국어 지원을 해야하는 상황이 생겨서

json 파일을 파싱하여

화면에 맞게 데이터를 출력하려고 했는데

위와 같은 비슷한 에러들(찾는 데이터가 undefined, 즉 데이터를 찾을 수 없다는..)이 계속 떴다.

 

// lang.en.json
{
  "content":{
    "example":"???",
    "example-array": {
    	"text": [
            "text1",
            "text2"
    	]
    }
  }
}
<%@ page import="java.io.*" %>
<%@ page import="org.json.*" %>
<%@ page import="org.json.simple.*" %>
<%@ page import="org.json.simple.parser.*" %>

<%
    try {
        // json 파일 읽기
        Reader reader = new FileReader(request.getRealPath("json file path"));
        
        // json 파싱
        JSONParser parser = new JSONParser();
        JSONObject jsonObject = (JSONObject) parser.parse(reader);
        
        // json 접근(여기에서 위와 같은 에러가 발생했다.)
        jsonObject.get("content").get("example");
        
  	} catch(IOException ex) {
    	System.out.println("error");
    }
%>

 

뭐 json 파일도 고쳐보고 getJSONObject, getAsString 등 써봤는데도

똑같은 오류가 계속 떠서 검색하다가 해결했는데

아래 사이트와 같이 강제 형변환을 하여 해결해주면 된다.

https://stackoverflow.com/questions/39434360/getjsonobjectstring-is-undefined-for-the-type-jsonobject

 

// 변수에 넣어서 값 출력
JSONObject temp = (JSONObject)jsonObject.get("content");
System.out.println(temp.get("example"));

// 한 줄로 쓰고 싶다면
System.out.println(((JSONObject)jsonObject.get("content")).get("example"));

// 결과 : ???

근데 에러는 해결했지만

결국 json 데이터를 화면에 출력할 때,

<%= %>로 위 변수의 값을 출력해주어야 하는게 목적이라서...

 

이유는 모르겠지만

temp cannot be resolved to a variable 에러,

즉 JSP에서 저 변수를 찾지를 못해서

변수를 출력해주는 방법을 찾을 때까진 저 코드를 사용할 수도 없고

 

json 객체에 접근할 때

계속해서 .get으로 접근해야하는 것도 완전 불편하고 효율적이지도 않아서

대표님이 알려주신 Jstl을 이용하여 jsp -> json 형식 출력하는 것을 사용하기로 했다.

https://java7.tistory.com/56

 

jstl을 이용하여 jsp -> json 형식 출력 (마지막 콤마 제거)

<%@ page contentType="text/plain; charset=utf-8" pageEncoding="utf-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/func..

java7.tistory.com

 

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

<%@ page import="java.io.*" %>
<%@ page import="org.json.simple.*" %>
<%@ page import="org.json.simple.parser.*" %>

<%
    try {
        // json 파일 읽기
        Reader reader = new FileReader(request.getRealPath("json file path"));
        
        // json 파싱
        JSONParser parser = new JSONParser();
        JSONObject jsonObject = (JSONObject) parser.parse(reader);
        
        // json 접근
        pageContext.setAttribute("test", jsonObject);
        
  	} catch(IOException ex) {
    	System.out.println("error");
    }
%>

실제로 화면에 출력할 땐 아래와 같이 간단하게 출력해주면 된다.

<h1>${test.content.example}</h1>
<h1>${test.content['example-array'].text[0]}</h1>

 

ps. 삽질하는 사람들의 시간을 절약하기 위해 포스팅 해봄........

'Language > Java, Jsp' 카테고리의 다른 글

JSP cafe24 SMS send  (0) 2022.03.24
jstl funtion  (0) 2022.03.18
JSP ResultSet 전체 레코드 개수 구하기  (0) 2022.03.16
jstl 문법 정리  (0) 2022.03.12
이클립스 톰캣 서버 오류 및 서버 설정  (0) 2018.07.21