2017-03-27 2 views
0

다음 클래스가 있습니다.JSP에서 ModelAttribute 멤버 변수를 가져올 수 없습니다.

class Bar { 

    public Bar(String fooVal) { 
     this.foo = fooVal; 
    } 

    private String foo; 

    public String getFoo() { 
     return this.foo; 
    } 

    @Override 
    public String toString() { 
     return this.foo; 
    } 

}

다음 컨트롤러

class Controller { 
    @RequestMapping(value = "/foo", method = RequestMethod.GET) 
    public ModelAndView() { 
     return new ModelAndView("barJSP", "barModel", new Bar("testFooVal")); 
    } 
} 

그리고 지금은 JSP에 액세스 foo는의 값을하려합니다.

나는 foo Vals를 인쇄하려고하는 barJSP에 다음과 같은 두 가지 JSP 변종이 있습니다.

<% System.out.println(pageContext.findAttribute("barModel.foo")); %> 

이것은 null을 인쇄합니다. 그러나

예상대로 testFooVal을 인쇄합니다

jsp 구문을 이해했습니다. 멤버에 액세스하는 데 사용되며 getter가 정의되어있는 한 작업해야합니다. 내가 놓친 게 있니?

답변

1

쉽게 접근 객체에 대한 JSP EL를 사용할 수 있습니다

${barModel.foo} 

을 그렇지 않으면, 당신은 변환하기위한 모델 클래스 캐스트를 가져올 수 있습니다 모두 지정된 속성에 대한

<%@ page import="com.example.model.Bar"%> 
<% Bar b = (Bar)(pageContext.findAttribute("barModel")); 
    out.println(b.getFoo()); 
%> 
+0

게터가 있으면이 작업을 수행 할 수 있습니까? –

+0

@ArunavSanyal $ {barModel.foo}는 암시 적으로 getFoo() 메소드를 호출합니다. –

0

방법 findAttribute() 검색 페이지, 요청, 세션 및 응용 프로그램의 순서로 4 단계로 구성됩니다. 레벨에 속성이 없으면 NULL을 반환합니다. 이 클래스에서 private 변수이며, 방법은 찾을 수 없기 때문에 다음과 같은 경우

<% System.out.println(pageContext.findAttribute("barModel.foo")); %> 

속성 barModel.foo에서

에 액세스 할 수 없습니다. 따라서 NULL을 반환합니다.

그러나 속성 barModel

<% System.out.println(pageContext.findAttribute("barModel")); %>

의 경우

컨텍스트에서 사용할 수 있고 인쇄 할 때 자동으로 toString() 메소드를 호출합니다.

+0

spring mvc에 대한 나의 이해는 private 속성에 액세스 할 수있는 모델 속성이었습니다. 캡슐화를 깨고 싶지 않아. –

관련 문제