2 Stimmen

Controller ist vorhanden, zeigt aber "Fehlercode 404 Seite nicht gefunden" in Grails an

New.gsp:

               Name:

NewController.groovy:

package sample
import com.sun.org.apache.bcel.internal.generic.NEW;

class NewController {
    def index = {
        if($params.userName){
            render(view:"/login.gsp")
        }
    }
}

login.gsp is a simple page, having a simple welcome note.

if some body the solution please reply,

thanks in advance. by prasanth

1voto

codelark Punkte 12116

Im geposteten Code gibt es einige Probleme, die zu Problemen führen werden:

  1. Sie greifen auf die Parameter mit $params anstatt params zu. Das $-Zeichen ist nur erforderlich, wenn Sie sich in einem GString befinden. z. B. def foo = "Ihr Benutzername ist ${params.userName}"

  2. Ihre Ansicht ist als new.gsp benannt, aber Ihre Aktion ist als index benannt. Grails sucht standardmäßig nach einer Ansicht, die zum Aktion-Namen in einem Verzeichnis passt, das nach dem Controller benannt ist. Mit anderen Worten, da Sie es nicht explizit angeben, um /new.gsp zu rendern, sucht grails nach /new/index.gsp. Sie können entweder die Ansicht in /new/index.gsp umbenennen oder grails mitteilen, die Ansicht new in der Index-Aktion zu rendern.

  3. Beim Versuch, Ihre angemeldete Seite zu rendern, rufen Sie render(view: 'login.gsp') auf. Die gsp-Erweiterung ist nicht erforderlich, wenn Sie den Render-Tag aufrufen. Sie sollen den grails Ansichtsnamen verwenden, nicht den Dateinamen. render(view: 'login')

  4. Wenn Sie eine aktuelle Version von Grails (>2.0) verwenden, sollten Sie Controller-Methoden anstelle von Closures verwenden. z. B. def actioName() { } anstatt def actionName() = { }. Die Begründung dafür findet sich in der Grails-Dokumentation.

So könnte es aussehen, wenn alle Probleme behoben sind:

Benenne new.gsp in /new/index.gsp um. Benenne login.gsp in /new/loggedIn.gsp um.

Controller:

Klasse NewController {
    def index() {
        if (params.userName) {
            forward Aktion: 'loggedIn'
            return // render und forward beenden die Flusskontrolle nicht
        }
    }

    def loggedIn() {} // keine Logik, rendert automatisch '/new/loggedIn.gsp'
}

1voto

Ändern Sie Ihren Controller-Namen in "new" anstelle von Neu in

Es wird funktionieren.

Sie können auch Ihre "speichern" Aktion im Controller ändern, sodass beim Klicken auf die Schaltfläche "Speichern" eine neue Seite gerendert wird.

0voto

Bart Punkte 16742

Fügen Sie Ihrem Controller einen Handler mit dem Namen login hinzu.

def login = {}

0voto

founddrama Punkte 2321

Wenn die Ansichtsdatei new.gsp lautet, muss auch Ihre Aktion new sein, oder Sie müssen ein URL-Mapping (in UrlMappings.groovy) erstellen, das so etwas wie Folgendes ausführt:

"/new" {
    controller = 'new'
    action = 'new'
}

Oder Sie können

static defaultAction = 'new'

...in Ihrem NewController einstellen.

Dann findet Grails die entsprechende Aktion auf Ihrem Controller.

0voto

john Smith Punkte 16566

Wenn Ihre Aktion index aufgerufen wird, können Sie auf die Seite zugreifen unter

localhost:8080/webapp/NewController

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X