2012-02-10 15 views
6

Estoy tratando de usar Grails Scaffolding para juntar una aplicación CRUD rápida alrededor de algunas tablas de bases de datos heredadas (ver this previous StackOverflow question para la saga hasta ahora). Ahora supero el peor de los problemas y tengo una aplicación CRUD en funcionamiento, pero queda un problema con la usabilidad general.Grails Andamios con etiquetas amistosas (en lugar de claves ID)

Muchos de mis objetos de dominio tienen asociaciones de claves foráneas con otros objetos de dominio. Un Contact pertenece a una Owner, etc.

Sin embargo, en las páginas CRUD para Contact, yo no quiero ver la clave real para idOwner ... porque eso no significa nada para los usuarios humanos. En su lugar, quiero que se muestre el valor Owner.name más amigable para con los humanos.

Las vistas "list" y "show" abordan explícitamente todos los atributos en el código generado automáticamente por la Vista, y tengo la capacidad de ajustar ese código para controlar lo que se presenta. Sin embargo, las vistas "crear" y "editar" no enumeran todos los atributos. En cambio aquellos Vistas hacen algún tipo de Grails taglib llamar así:

... 
<fieldset class="form"> 
    <g:render template="form"/> 
</fieldset> 
... 

Esta llamada aparentemente detecta automáticamente en tiempo de ejecución lo que los campos son, y toma sus propias decisiones sobre cómo mostrarlos. Para los objetos de dominio que tienen asociaciones, toma la mala decisión de mostrar el ID de galimatías del objeto asociado en lugar de un atributo más amigable para el ser humano.

¿Existe alguna manera "fácil" (o al menos "mejor práctica") de cambiar la forma en que los campos se muestran en una vista "editar" o "crear"? Sin duda, este es un problema común cuando se utiliza el uso de Andamios con objetos de dominio que tienen asociaciones.

+0

Esto es un asunto secundario, pero más tarde descubrí que este fragmento de código anterior simplemente está extrayendo HTML del archivo "_form.gsp", que se genera automáticamente en el mismo directorio que las vistas generadas automáticamente para ese objeto de dominio . –

Respuesta

15

Oh, duh ... sólo se puede poner en práctica un método "toString()" en el objeto de dominio asociado, teniendo que volver al campo que desee utilizar con fines de exhibición:

class Owner { 

    String id // not human-friendly 
    String name // human-friendly 
    // ...etc... 

    String toString() { 
     return name 
    } 
} 

Ahora cuando estás en una vista CRUD para Contact, que tiene un campo para su asociación Owner, lo que se muestra en la pantalla es el atributo Owner.name en lugar de Owner.id o alguna referencia de objeto desagradable.

Cuestiones relacionadas