Domanda

Ho bisogno di convalidare Salva azione tra i 3 domini, qui è il rapporto:

Utente - JobProcess: uno-a-molti, JobProcess - Heatmap:. Uno-a-molti

User { static hasMany = [ jobs : JobProcess ] ... }
JobProcess { static hasMany = [ heatmaps : Heatmap ] ... User script ... }
Heatmap { static belongsTo = JobProcess ... JobProcess job ... }

sto usando eccezioni a flusso convalida di controllo, qui è la mia classe di convalida:

class ValidationException extends RuntimeException {
  Object invalidObject
  ValidationException(String message, Object invalidObject) {
    super(message)
    this.invalidObject = invalidObject
  }
}

Ho anche costruire una classe di servizio per operazioni di Heatmap astratte (e si lega params dati a oggetto):

  def addJob(params) {

    def user = User.findById(params.user_id)

    if (user) {

    def heatmap = new Heatmap(params)

    def process = new JobProcess(params)

        process.addToHeatmaps(heatmap)
        user.addToJobs(process)

    if (user.save()) {
      return heatmap
    } else {
       throw new ValidationException("Invalid form", heatmap )
      }
    }
 }

E il mio controller:

  try {
    def heatmap= HeatmapService.addJob(params)
      flash.message = "Running new process : $heatmap.job}"
      redirect(uri:'/')
  } catch (ValidationException che) {
    flash.message = "Validation Failed ${che.message}"
    render(view:'create', model:[heatmap:che.invalidObject])
  }

La mia prima edizione : Non ho alcuna convalida errore utilizzando:? User.save () - il motivo per cui non sono convalida esegue
Posso risolvere questo problema buy aggiornamento se (user.save ()) da:. If (heatmap.validate () && user.save ())
C'è un modo migliore di procedere?

Il mio secondo problema :. Il mio reindirizzamento non determina un'eccezione valida post
Sto reindirizzato a mio avviso creare, ma tutti i miei campi sono vuoti (ho perso tutti i campi di informazione) e senza errori di convalida.
Tuttavia, sto usando il modello: [heatmap: che.invalidObject].
Con l'eccezione, sto passando indietro l'Invalidobject, quindi il mio creare vista dovrebbe visualizzare gli errori di validazione esatte? Che cosa c'è che non va?

Grazie

È stato utile?

Soluzione

trovo il mio problema, è a causa della mia vista GSP, stavo usando il fagiolo sbagliato:

<td valign="top" class="value ${hasErrors(bean: heatmapInstance, field: 'project_name', 'errors')}">

Così, ho aggiornato alla heatmap, e ora ho la mia convalida di errore:

<td valign="top" class="value ${hasErrors(bean: heatmap, field: 'project_name', 'errors')}">

Grazie Victor.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top