Сопоставления URL не работают должным образом в grails

#grails

#grails

Вопрос:

Я создаю приложение, которое настраивается на основе-definitive-guide-to-grails окончательного руководства по grails

В этом я использовал пользовательский URL для перенаправления на контроллер хранилища, который

 UrlMappings.groovy
class UrlMappings {

    static mappings = {
        "/"(controller:"store")
}
}
  

поэтому, когда я запускаю приложение, оно подключается к контроллеру хранилища по умолчанию
и у меня есть класс пользовательского домена, а также класс UserController, в которых есть действия register и login

 User.groovy
class User {
String login
String password
...
}
UserController.groovy
class userController.groovy
{
def register(){
...}
def login(){
..}

StoreController.groovy
class StroeController{
def index(){
..}
  

Пользовательский контроллер имеет соответствующие страницы просмотра в user / register.gsp и store / index.gsp
the

 store/index.gsp is
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
<meta name="layout" content="main"/>
<title>gTunes Store</title>
</head>
<body id="body">
Your Online music store and storage service!
<p>Manage your own library, browse music and purchase new tracks as
they become available</p>
</body>
</html>
  

и я хочу отобразить страницу входа во все приложение, я разместил поля для входа и пароля в main.gsp, который находится под

 layouts/main.gsp
main.gsp is
<g:form name="loginForm"  url="[controller:'user',action:'login']">
Username:
 <g:textField name="login"
 value="${fieldValue(bean:loginCmd, field:'login')}">
 </g:textField><br>
Password:
 <g:passwordField name="password"></g:passwordField> 
 <br/>
 <input type="image"
 src="${createLinkTo(dir:'images', file:'login-button.gif')}"
 name="loginButton" id="loginButton" border="0"></input>
 </g:form>
<g:link controller="user" action="register" >Signup now</g:link>
 to start your own personal Music collection!
  

приведенный выше main.gsp содержит форму, в которой есть текстовое поле для входа в систему и текстовое поле пароля и кнопка, и Она также содержит тег ссылки, который используется для процесса регистрации, когда я запускаю приложение, приложение переходит на страницу индекса по умолчанию контроллера хранилища, основанную на сопоставлении URL-адресов по умолчанию, и эта страница индекса также содержит текстовое поле для входа в систему и поля пароля и кнопку входа, а также содержит ссылку регистрации, когда я нажал кнопку входа, она работает нормально, но при нажатии на ссылку регистрации она не переходит на страницу регистрации пользовательского контроллера, хотя register.gsp и пользовательский контроллер содержат действие register, но когда я удаляю код «/» (controller: «store») из класса сопоставлений url, затем я запускаю приложение, приложение, показывающее список контроллеров, я нажал на контроллер магазина, оно переходит на страницу индекса, в которой я нажал ссылку регистрации, чтобы зарегистрироваться, теперь ссылка работает нормально, она переходит на страницу регистрации gsp пользовательского контроллера, но она не работала, когда я использовал приведенное выше пользовательское сопоставление URL

Ответ №1:

Вам необходимо добавить сопоставление «по умолчанию» перед вашим пользовательским сопоставлением,

 "/$controller/$action?/$id?"{ constraints {
                // apply constraints here
            } }
  

Это сопоставление:

   "/"(controller:"store")
  

только сопоставляет «/» поэтому любой запрос будет отправлен на контроллер хранилища, потому что у вас нет другого правила, поэтому, если вы попытаетесь получить доступ к / user / login, он попытается выполнить поиск пользовательского представления в контроллере хранилища.

Ответ №2:

Попробуйте это..У меня это работает.(Grails 2.4.5 / java 8 и java 7)

 class UrlMappings { 
   static mappings = {
    "/$controller/$action?/$id?"{
            // apply constraints here   
    }
    "/intialize/$id?" (controller: "xyz") {
            action = [GET:"abc"]
    }
    "/checksession" (controller: "xyz") {
            action = [GET:"mno"]
    }