2017-10-16 8 views
1

Grails 버전 2.4.4와 postgresql을 사용하고 있습니다. 앱을 실행하면 오류 메시지 Cannot get property 'myname' on null object가 표시됩니다. 스캐 폴딩을 사용하여 데이터를 업로드하고 볼 수 있기 때문에 테이블이 비어 있지 않고 데이터베이스가 올바르게 연결되어 있다는 것을 알고 있습니다.Grails에서 데이터베이스 테이블의 내용을 볼 수 없습니다.

도메인 클래스 코드 :

class My_table { 

    //Integer id 
    String myname 

    static constraints = {} 
} 

컨트롤러 코드 :

class My_tableController { 

def index() { 
    def my_table = My_table.list() 
    [my_table:my_table] 
} 

내의 index.gsp 파일 :

<g:select name="name" from="${my_table}"/><br/> 
    <label>${my_table.myname} </label><br/> 
+0

도메인 개체 '테이블'을 호출하는 것이 좋습니다. 테이블은 ANSI SQL의 예약어입니다. 테이블이 Postgres로 생성되었다고 확신합니까? 전체 스택 트레이스를 제공 할 수 있습니까? – saw303

+0

실제 코드의 예제로 이름 테이블을 제공했습니다. 오해 죄송합니다. –

+0

전체 스택 추적을 제공해주십시오. 귀하의 본보기가 오해의 소지가 있습니다. – saw303

답변

1

이 줄에서 오류가 발생하는 것으로 보이는 양식 : <label>${my_table.myname} </label><br/>. 여기

당신은 my_tableMy_table 인스턴스의 목록이며 속성이라는 이름을 가지고 있지 않기 때문에 오류가 발생

<g:select name="name" from="${my_table}"/><br/> <label>${my_table.myname} </label><br/>

상황

에서 속성 이름을 부르고있다.

수이 문제를 해결하는 방법 : 당신이 허용 함량 0 개 이상의 <option> 또는 <optgroup> 요소를 읽을 수

<select name="name"> 
    <g:each in="${my_table}" var="table"> 
     <option value="${table.name}">${table.name}</option> 
    </g:each> 
</select> 

는 또한 라벨 태그를 기억은 선택 안에 유효하지 않습니다. in https://developer.mozilla.org/en-US/docs/Web/HTML/Element/select

0

표는 대부분의 데이터베이스에서 예약 된 단어입니다. 방법라는 이름의 테이블이 이미 있기 때문에 정적 매핑 블록에

static mapping = { 
    table 'my_table' 
} 

라는 이름의 테이블이 문제가 테이블에 테이블라는 이름의 열을 추가 : 어느 클래스와 속성의 이름을 변경하거나 다른 사람이 소유하지 않는 무언가에 매핑 존재합니다. 최신 버전의 grails에는보다 유연한 ORM 매핑 블록이 있습니다.

static mapping = { 
    table 'my_table' 
    table column: 'my_table' // unsure if this would work since it overlaps with the other mapping method 
} 
+0

답변 해 주셔서 감사합니다.하지만 테이블 이름이 '테이블'이 아니므로 코드의 예제로 제공해 주셨습니다. 잘못 이해 한 것을 유감스럽게 생각합니다. –