@ResponseBody Annotation을 사용하게 되면

Controller에서 return "json결과"; 하는 경우

json으로 "json결과" 라는 String 을 받게된다.

 

Y/N 식의 단발성 DATA라면 관계 없지만

여러개의 결과값을 받고자 한다면

Map식의 결과를 받는 것이 좋다.

 

이럴 때 사용할 수 있는 방법이다.

 

 

* xxHTML.jsp 의 경우

 

$.ajax( {
    type : "post",
    url : "/xxProc.do",
    data : $("#formid").serialize(),
    dataType : "json",
    success : function( data ) {
        if( "Y" == data.result ) {
            alert( data.message );
        }
    }
} );

 

* xxController.java 의 경우

 

@Controller
public class xxController {

   @RequestMapping( value = "/xxProc.do" )
   public ModelAndView xxProc( xxVO xxxVO, ModelMap model ) throws Exception {
      model.put( "result", "Y" );

      model.put( "message", "OK" );

   return new ModelAndView( "jsonV", model );

}

 

 

이렇게 처리하기 위해 기본 설정이 필요하다.

 

* web.xml

  <servlet>
    <servlet-name>action</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>/WEB-INF/config/dispatcher-servlet.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>

 

* dispatcher-servlet.xml

<bean id="beanNameResolver" class="org.springframework.web.servlet.view.BeanNameViewResolver" p:order="0" />

<bean id="jsonV" class="org.springframework.web.servlet.view.json.MappingJackson2JsonView">

   <property name="contentType" value="application/json;charset=UTF-8"></property>

</bean>

 

* pom.xml

  <dependency>
   <groupId>com.fasterxml.jackson.core</groupId>
   <artifactId>jackson-databind</artifactId>
   <version>2.5.1</version>
  </dependency>

 

  1. 익명 2017.01.03 21:25

    비밀댓글입니다

    • 행이™ 2017.01.09 18:57 신고

      원래 $.ajax를 쓰면 안움직이긴한데요.
      정상적으로 호출이 되었는지는
      호출하려는 해당 method에 print를 쓰셔서 확인하시거나
      명확하게 return을 받은 값을 alert 해보심이 정확하겠죠?

  2. 알 수 없는 사용자 2017.06.06 22:04

    고맙습니다.

Struts.xml에

json으로 응답받을 Action.method에 result값으로 json을 처리할 type을 기술하고

화면에서 받을 이름을 기술했는데도 정상적으로 값이 읽혀지지 않을 때는

방황하지 말고, 당황하지 말고, 삽질하지 말고

해당 Action에 get/set method를 생성해주어야

화면에서 정상적으로 값을 읽을 수 있다.

 

화면에서 읽을 수 있도록

HttpServletRequest request =  ServletActionContext.getRequest();
request.setAttribute("json값", json값);

요롷게 해줘도 읽혀지지 않는다.

${json값.Key1} 요롷게는 읽혀져도...

 

- Struts.xml

<result-type name="json처리" class="json처리Class">
     <param name="encoding">UTF-8</param>
     <param name="contentType">text/html</param>
     <param name="contentType">application/json</param>
</result-type>

 

<action name="getJsonValue" class="Action" method="jsonMethod">
     <result name="success" type="json처리"><param name="value">json값</param></result>
</action>

 

- Action.java

private Map<String, Object> json값;

 

public String jsonMethod() {

    json값 = 블라블라;

    return SUCCESS;

}

 

public Map<String, Object> getJson값() {
     return json값;
}
public void setJson값(Map<String, Object> json값) {
     this.json값 = json값;
}

 

 

- 화면.jsp

$.ajax({
    type:'POST',
    url : "/getJsonValue.do",
    data :  { "param1" : param1 },
    success : function( json ) {
        var json값 = eval( json );
        alert( json값.Key1 );
    }
});

 

'plming > Java - Struts' 카테고리의 다른 글

404 페이지 대신 Struts Problem Report 나올 때  (0) 2015.07.27
Struts - ajax/json  (0) 2015.05.20
Struts2 - Login 처리  (0) 2015.05.20

+ Recent posts