Häufige Grails-Fehler

Fehler:
Error processing GroovyPageView: Cannot create a session after the response has been committed

Fehlerhafter Code:

<g:if test="${session.user != null}">
  <li><g:link class="home" controller="user" action="logout">Logout</g:link></li>
</g:if>
<g:else>
  <li><g:link class="home" controller="user" action="login">Login</g:link></li>
</g:else>

Fehlerfreier Code:

<g:if test="${request.getSession(false) && session.user != null}">
  <li><g:link class="home" controller="user" action="logout">Logout</g:link></li>
</g:if>
<g:else>
  <li><g:link class="home" controller="user" action="login">Login</g:link></li>
</g:else>

IllegalStateException

Die java.lang.IllegalStateException taucht bei Applikationen aus der Java Micro Edition häufig auf, wenn versucht wird bei einem Form-Objekt mit append ein Item hinzuzufügen, das bereits schon auf dem Form existiert.

Beispiel:

1
2
3
4
        Form neuesForm = new Form("Titelzeile");
        StringItem text = new StringItem("Label","Text");
        neuesForm.append(text);
        neuesForm.append(text);

Das ist verboten. Um dasselbe Objekt erneut dem Form hinzufügen zu können, muss man die ältere Version zuerst mit delete entfernen.

Beispiel:

1
2
3
4
5
        Form neuesForm = new Form("Titelzeile");
        StringItem text = new StringItem("Label","Text");
        neuesForm.append(text);
        neuesForm.delete(0);
        neuesForm.append(text);

Die delete-Methode akzeptiert nur Werte vom Typ Integer. Die „0“ steht für das erste Element, welches dem Form hinzugefügt wurde, die „1“ für das zweite Element, usw.. Mit deleteAll() können alle Element vom Form entfernt werden.