2010-01-23 2 views
1

Grails GSP에 합성 필드 값을 저장하려면 어떻게해야합니까?

다음과 같이 복합 도메인 개체가 있습니다.

class Person 
{ 
    static embedded = ['forSale'] 
    Boolean isSelling 
    House forSale 
} 

class House 
{ 
    Integer numBedrooms 
} 

다음과 같이 numBedrooms에 대한 선택 컨트롤이 있습니다.

<tr class="prop"> 
<td valign="top" class="name"> 
    <label for="numBedrooms"><g:message code="person.numBedrooms.label" default="Num Bedrooms" /></label> 
</td> 
<td valign="top" class="value ${hasErrors(bean: personInstance, field: 'forSale.numBedrooms', 'errors')}"> 
    <g:select name="numBedrooms" value="${fieldValue(bean: personInstance, field: 'forSale.numBedrooms')}" 
      noSelection="${['null':'Select a number...']}" 
     from="${1..6}" 
    /> 
</td> 
</tr> 

select의 fieldValue에서 forSale.numBedrooms를 사용하고 있습니다. create-views에 의해 생성 된 create 뷰가 forSale House 객체의 필드에 대한 참조를 가지고 있지 않기 때문에 어떻게해야 하는지를 살펴보기 위해 scaffolded 코드를 생성 할 수 없었습니다.

또한 GSP를 통해 액세스되는 합성 필드의 예를 나타낼 수 없었으므로 이것은 약간의 추측입니다. 어떤 경우에도 GSP 페이지는 오류없이 렌더링되지만, 데이터를 저장할 수 없었기 때문일 수 있습니다.

URl 쿼리 문자열의 일부로 numBedrooms의 값을 보냅니다 ...

& numBedrooms = 2

이렇게하면 컨트롤러의 저장 코드가 자동으로 실패합니다. 이제까지 데이터베이스에 기록됩니다. 거의 모든 것을 위해 디버그 로깅을 사용하도록 설정했지만 로그에 아무 것도 제시하지 않는 메시지가 표시됩니다.

쿼리 문자열에서 numBedrooms 매개 변수를 제거하면 저장이 정상적으로 진행되므로 numBedrooms를 해결하는 것과 관련이 있다고 추측합니다.

내가 뭘 잘못하고 내 문제를 추적 할 수있는 단서?

답변

0

내가하는 일은 House 도메인의 경우 generate-all입니다. 그런 다음 도메인을 복사하여 붙여넣고 완료되면 파일을 제거하십시오. 나중에 House 도메인을 사용하는 경우 House 도메인을 편집하기위한 템플릿을 만드는 것이 더 스마트하다는 것을 발견했습니다. 당신을 위해

당신이 *forSale*.numBedrooms=2 필요 당신의 PARAM 문자열에서 (name 속성에 주목)

<tr class="prop"> 
<td valign="top" class="name"> 
    <label for="forSale.numBedrooms"><g:message code="house.numBedrooms.label" default="Num Bedrooms" /></label> 
</td> 
<td valign="top" class="value ${hasErrors(bean: personInstance.forSale, field: 'numBedrooms', 'errors')}"> 
    <g:select name="forSale.numBedrooms" value="${fieldValue(bean: personInstance.forSale, field: 'numBedrooms')}" 
      noSelection="${['null':'Select a number...']}" 
     from="${1..6}" 
    /> 
</td> 
</tr> 

이 같은 뭔가가 필요 GSP. 이 코드는 person.properties = params 또는 new Person(params)으로 작동합니다.

임베디드 "명령어"는 동일한 테이블에 매개 변수를 포함하도록 Hibernate에게만 알려주며 이들은 여전히 ​​별도의 도메인 클래스입니다. 비록 당신이 그것을 결코 사용할지도 모르더라도 아마 도메인을위한 테이블을 생성 할 것이다.

희망이 도움이됩니다.

+0

내 코드를 확인하면 forSale.numBedrooms를 사용하고 있으며 url 매개 변수도 변경되었음을 알 수 있습니다. URL 매개 변수를 통해 무엇이 나오는지 확인하면 forSale 필드가 하나의 객체로 그룹화됩니다. 무엇보다 당신이 제안한대로 매개 변수 할당을 사용하여 속성에 할당합니다. 문제는 내 테이블 행이 업데이트되지 않는다는 것입니다. grails 나 hibernate가 스택에있는 어떤 것이 자동으로 실패하고 있습니다. 디버깅 로깅을 모든 항목과 128Mb 로그 파일에 적용했으며 업데이트가 실패했다는 메시지가 표시되지 않았습니다. 나는 무슨 일이 일어나는지 전혀 모른다. – Simon

+0

코드에 와 같은 코드가 필요합니다. –

관련 문제