Grails - общение между контроллерами и представлениями - PullRequest
3 голосов
/ 08 июня 2011

Мне интересно, как я могу заполнить текстовое поле в моем представлении из списка в моем контроллере, я некоторое время искал примеры, но на самом деле ничего не нашел. Я не уверен, как именно получить доступ к текстовому полю из представления, где, как в Java, вы могли бы сделать что-то простое, например jTextField.getText() Мне также интересно, как получить текст в моем текстовом поле.

Ниже я приведу пример кода того, что я делаю.

Контроллер:

def loadFile = {
    def propFile = "c:/props.txt"
    def propMap = [:]
    def propList = []

    new File(propFile).eachLine { line ->
    def (key,value) = line.split(':').collect { it.trim() }
    propMap."$key" = "$value"

    if(propMap) {
    propList << propMap
    propMap = [:]
    }
}

}

def saveFile = {
    //get contents of text box
    //over-write props.txt with new information
}

Вид:

<g:textField name="properties"/>
<span class="menuButton"/><g:link action="loadFile" controller="myController">Load File</g:link>
<span class="menuButton"/><g:link action="saveFile" controller="myController">Save File</g:link> 

Итак, мой вопрос кажется относительно простым, как мне получить доступ к текстовому полю, когда я хочу заполнить его и сохранить данные из него?

.

.

.

EDIT

После ознакомления с некоторыми примерами, представленными вами, ребята, у меня есть последний вопрос.

Почему следующий код действует по-разному при нажатии кнопки Load File?

<g:form controller="drive">
<g:textArea name="properties" value="${params.param1}" rows="50" cols="6"/>
<br/>
<g:submitButton name="loadFile" value="Load File"/>
<g:submitButton name="saveFile" value="Save File"/>
</g:form>
<span class="menuButton"/><g:link action="loadFile" controller="drive">Load File</g:link>

При нажатии на g:submitButton, имеющем дело с loadFile, он перенаправляет меня на list gsp. Однако, когда я нажимаю menuButton, он загружает текстовую область с текстом из файла. Причина, по которой я спрашиваю, заключается в том, что при втором варианте кнопка не находится там, где мне бы хотелось, чтобы она была.

Ответы [ 2 ]

4 голосов
/ 08 июня 2011

ответ jjczopek показывает, как получить доступ к данным в контроллере после их отправки из представления.

Вы можете передать значение по умолчанию из контроллера в представлениеустановив параметр в контроллере, например ...

    params.param1 ='value to pass'
    render(view:"testView")

Затем, по вашему мнению, вы можете получить его снова с помощью ...

<g:textField name="text1" value="${params.param1}"/>

Вы также можете найти thisвопрос и эти документы полезны.

Если вы хотите передать объекты домена через один из следующих конкретных методов рендеринга, может быть лучше ... Grails Controller - Render

4 голосов
/ 08 июня 2011

Оберните текстовое поле в тег формы.Таким образом, когда вы отправляете его, вы можете получить доступ к своему полю в контроллере.

<g:form controller="myController" action="saveFile">
  <g:textField name="properties"/>
  <g:submitButton name="saveFile" value="Save File" />
</g:form>

Затем вы можете получить доступ к полю properties в контроллере:

def saveFile = {
    def properties = params.properties
    // do whatever you need
}

РЕДАКТИРОВАТЬ:

Чтобы решить некоторые из проблем, которые возникли позже в комментариях, я попытаюсь предоставить более глубокое понимание.

Давайте предположим, что ваш контроллер называется Drive и view (форма дляпредставить свойства) drive/properties.gsp.Если вы хотите, чтобы ваша кнопка загрузки загружала ваши свойства в текстовую область, вы можете сделать что-то вроде этого:

def loadFile = {
   // your code here

   render(view: 'properties.gsp', model=[properties:propList])
}

И по вашему мнению:

<g:form controller="drive">
  <g:textArea name="properties" value="${properties?.join("\n")}" rows="50" cols="6"/>
  <br/>
  <g:actionSubmit name="loadFile" action="loadFile" value="Load File"/>
  <g:actionSubmit name="saveFile" action="saveFile" value="Save File"/>
</g:form>

Это должно сделать вашу форму сзначения из вашего файла, каждое свойство в новой строке.Но я не проверял это.

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