Как получить ввод из текстового поля в форме веб-страницы - PullRequest
2 голосов
/ 11 августа 2011

Это на Граалях! Это очень простая вещь, которую, к сожалению, я не понимаю.

У меня есть это в моем index.gsp

<g:form name="testForm" url="[controller:'test',action:'index']">
   <g:textField name="Input A" value="${Input1}">  </g:textField>
   <g:textField name="Input B" value="${Input2}"> </g:textField> 
</g:form>

У меня также есть это в моем классе TestController:

class TestController {

    def index = {
        def Input1
        def Input2
    }
}

Я хочу получить два ввода, которые пользователь вводит на веб-странице, и сохранить их в соответствующие поля (Input1, Input2) на контроллере.

Как мне это сделать?

спасибо

Ответы [ 5 ]

6 голосов
/ 11 августа 2011

Вы можете написать свою форму так:

<g:form name="testForm" controller="test" action="index">
 <g:textField name="Input1" value="${Input1}">  </g:textField>
 <g:textField name="Input2" value="${Input2}"> </g:textField> 
 <g:actionSubmit value="Send to controller"  action="index"/>
</g:form>

Обратите внимание, что в этом случае

  1. параметр контроллера для тега g: form не нужен, он используется по соглашению
  2. Действие также может быть удалено в зависимости от вашего маршрута (и версии grails), но в большинстве случаев это то, что вы указываете в форме, чтобы grails знал, куда отправлять
  3. Параметры были немного не синхронизированы "Input A" -> "Input1"

Тогда в контроллере

class TestController {

   def index = {
    def Input1 = params.Input1
    def Input2 = params.Input2
    ["Input1": Input1, "Input2": Input2]
   }
 }

При этом значения будут правильно отображаться (внутри возвращенной модели)

1 голос
/ 11 августа 2011

Вы получаете параметры формы из неявной переменной "params". Сделайте log.error(params) в вашем контроллере, и вы будете знать, как они передаются. Вы можете получить доступ к вашему параметру, как params."Input 1".

Обратите внимание, что есть изящные способы обработки нескольких входных данных из одного класса, например, с учетом класса домена:

class Test {
  String a;
  String b;
}

Вы можете иметь форму:

<g:form name="testForm" controller="test" action="index">
  <g:textField name="test.a" value="${Input1}">  </g:textField>
  <g:textField name="test.b" value="${Input2}"> </g:textField> 
</g:form>

А в контроллере вы делаете:

class TestController {

  def index = {
    def testInstance = new Test(params.test)
  }
}

Однако этот трюк вы должны использовать только в административных областях или чем-то еще, поскольку есть некоторые соображения безопасности, которые необходимо сделать.

0 голосов
/ 31 декабря 2015
class TestController {

       def index = {
        def Input1 = params.input1
        def Input2 = params.input2


        render(Input1+"")
        render(Input2+"")
       }
}
0 голосов
/ 11 августа 2011

Так что кнопка «отправить» работает.

<g:form name="testForm" controller="test" action="index">
    <g:textField name="input1" value="${input1}"> </g:textField>
    <g:textField name="input2" value="${input2}"> </g:textField>
<g:submitButton name="Submit" value="Submit"></g:submitButton>
</g:form>

...

class TestController {

       def index = {
        def Input1 = params.input1
        def Input2 = params.input2


        render(Input1+"<br />")
        render(Input2+"<br />")
       }
}
0 голосов
/ 11 августа 2011

Проверьте карту params.

Вы можете получить доступ к полям по их именам:

def input1 = params.input1;
def input2 = params.input2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...